Nullable-Typen und der ?-Modifier
Deklarieren Sie Nullable-Variablen und verstehen Sie die Null-Sicherheit von Kotlin zur Compile-Zeit.
Nullable-Typen und der ?-Modifier ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Null-Sicherheit in Kotlin
Kotlin unterscheidet bereits zur Compilezeit zwischen Typen, die null enthalten können, und solchen, die das nicht können. Der Compiler verhindert die meisten NullPointerExceptions vor der Laufzeit.
Nicht-nullbarer Typ
Ein Kotlin-Typ kann standardmäßig nicht null sein. Wenn Sie versuchen, null zuzuweisen, lehnt der Compiler dies ab.
fun main() {
val name: String = "Ada"
// val nope: String = null // ERROR
println(name)
}Nullable-Typ mit ?
Fügen Sie ? an, um null zuzulassen. Der Compiler behandelt die Variable nun als optional vorhanden.
fun main() {
val name: String? = null
println(name) // null
}Methoden auf Nullable-Werten aufrufen
Sie können eine Methode nicht direkt auf einem Nullable-Wert aufrufen, ohne zuerst den null-Fall zu behandeln. Der Compiler lehnt dies ab.
fun main() {
val name: String? = "Bob"
// println(name.length) // ERROR — name might be null
if (name != null) println(name.length) // smart cast
}Smart Casts
Nach einer Prüfung mit if (x != null) führt Kotlin innerhalb des Zweigs einen Smart Cast von x zu einem nicht-nullbaren Typ durch.
fun main() {
val name: String? = "Alice"
if (name != null) {
println("Length: ${name.length}") // safe, smart-cast
} else {
println("No name")
}
}Nullable-Funktionsparameter
Markieren Sie Funktionsparameter als nullable, wenn sie fehlen können. Der Aufrufer muss ausdrücklich einen Wert oder null übergeben.
fun greet(name: String?) {
if (name == null) println("Hello, stranger")
else println("Hello, $name")
}
fun main() {
greet("Sara")
greet(null)
}Nullable-Rückgabetyp
Eine Funktion, die X? zurückgibt, teilt dem Aufrufer mit, dass sie null zurückgeben kann – der Aufrufer muss damit umgehen.
fun findUser(id: Int): String? {
return if (id == 1) "Alice" else null
}
fun main() {
val u = findUser(2)
println(u ?: "no user")
}Nullable-Eigenschaften
Auch Eigenschaften von Klassen können nullable sein. Das ist üblich, wenn Felder später befüllt oder optional abgerufen werden.
data class Profile(
val name: String,
val avatarUrl: String?
)
fun main() {
val p = Profile("Lee", null)
println(p.avatarUrl ?: "(no avatar)")
}Vergleich mit Java
Java-Typen, die nach Kotlin gelangen, erscheinen als Plattformtypen (String!) – Kotlin vertraut Ihnen, bietet aber keine Null-Sicherheit. Annotieren Sie Java-APIs nach Möglichkeit immer mit @Nullable/@NotNull.
fun main() {
val maybeList: List<Int>? = null
val listOfMaybe: List<Int?> = listOf(1, null, 3)
println(maybeList?.size) // null
println(listOfMaybe.size) // 3
}Vergleich mit Java
Java-Typen, die in Kotlin übernommen werden, erscheinen als Plattformtypen (String!) – Kotlin vertraut Ihnen, bietet aber keine Null-Sicherheit. Annotieren Sie Java-APIs nach Möglichkeit immer mit @Nullable/@NotNull.
fun main() {
val maybeNull: String? = System.getenv("FOO") // null if unset
println("env FOO = ${maybeNull ?: "(unset)"}")
}Warum das wichtig ist
Null-Sicherheit zur Compilezeit verhindert eine ganze Klasse von Abstürzen zur Laufzeit. Nutzen Sie den Modifizierer ? bewusst – er dokumentiert die Absicht und erzwingt die Behandlung des null-Falls.
fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
val r1 = divide(10, 2) // 5
val r2 = divide(10, 0) // null — handled at call site
println("$r1, $r2")
}Schnelltest
Was bedeutet das ? am Ende einer Typdeklaration?
Zusammenfassung
Kotlin-Typen sind standardmäßig nicht nullable. Fügen Sie ? hinzu, um null zuzulassen. Der Compiler erzwingt die Behandlung von null durch Smart Casts, Safe Calls und den Elvis-Operator und verhindert so die meisten NullPointerExceptions vor der Laufzeit.
Häufig gestellte Fragen
Ist die Lektion „Nullable-Typen und der ?-Modifier“ kostenlos?
Ja — der vollständige Text von „Nullable-Typen und der ?-Modifier“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Nullable-Typen und der ?-Modifier“?
Deklarieren Sie Nullable-Variablen und verstehen Sie die Null-Sicherheit von Kotlin zur Compile-Zeit. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Nullable-Typen und der ?-Modifier“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Nullable-Typen und der ?-Modifier
- Safe Call ?. und Elvis ?: im praktischen Code
- let, also und run mit Nullable-Receivern
- !!-Operator: Wann und warum Sie ihn vermeiden sollten