Sichere Aufrufe und Elvis
Die Operatoren ?. und ?:.
Sichere Aufrufe und Elvis ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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 Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Mehr als nur if-Prüfungen
Jeden Nullable-Wert mit einer if-Bedingung zu prüfen funktioniert, wird aber schnell umständlich. Kotlin bietet kompakte Operatoren, die speziell für den Umgang mit null entwickelt wurden.
In dieser Lektion geht es um den Safe-Call-Operator ?. und den Elvis-Operator ?:, zwei Werkzeuge, die Sie ständig verwenden werden.
Der Safe-Call-Operator
Der Operator ?. ruft eine Methode nur auf, wenn der Wert nicht null ist. Ist er null, ergibt der gesamte Ausdruck null, statt einen Absturz zu verursachen.
Er ist eine sichere Kurzform für das Muster „wenn nicht null“.
fun main() {
val name: String? = "Coddy"
println(name?.length)
}Safe Call bei null
Wenn der Empfänger null ist, wird der Safe Call abgebrochen und gibt null zurück. Es wird keine Ausnahme ausgelöst.
Das ausgegebene Ergebnis lautet hier null und nicht etwa ein Absturz.
fun main() {
val name: String? = null
println(name?.length) // prints: null
}Safe Calls verketten
Sie können ?. über mehrere Schritte hinweg verketten. Wenn ein Glied null ist, wird die gesamte Kette beendet und ergibt null.
Das eignet sich besonders gut für den Zugriff auf verschachtelte optionale Daten.
class Address(val city: String?)
class User(val address: Address?)
fun cityOf(u: User?): String? {
return u?.address?.city
}Der Elvis-Operator
Der Elvis-Operator ?: liefert einen Ersatzwert, wenn die linke Seite null ist. Er ist nach der Frisur des Sängers benannt, der das Symbol ähnelt.
Lesen Sie ihn so: Verwenden Sie den linken Wert oder andernfalls den rechten Wert.
fun main() {
val name: String? = null
val shown = name ?: "Guest"
println(shown) // prints: Guest
}Elvis mit Safe Calls
Safe Call und Elvis funktionieren hervorragend zusammen. Verwenden Sie ?., um auf einen Wert zuzugreifen, und ?:, um einen Standardwert bereitzustellen, falls etwas null war.
Mit diesem Muster wird ein Nullable-Ergebnis in ein garantiert Nicht-Nullable-Ergebnis umgewandelt.
fun main() {
val name: String? = null
val len: Int = name?.length ?: 0
println(len) // prints: 0
}Beispiel für eine Standardlänge
Der Ergebnistyp ist hier ein einfaches Int, nicht Int?. Der Elvis-Operator hat die Nullability entfernt.
Nach ?: mit einem Nicht-Nullable-Ersatzwert weiß der Compiler, dass der Wert niemals null sein kann.
val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null IntElvis für die vorzeitige Rückgabe
Da return und throw in Kotlin Ausdrücke sind, können Sie sie rechts vom Elvis-Operator einsetzen.
So können Sie die Ausführung übersichtlich vorzeitig beenden, wenn ein erforderlicher Wert fehlt.
fun process(input: String?) {
val text = input ?: return
println(text.uppercase())
}Safe Call mit let
Kombinieren Sie ?. mit let, um einen Block nur auszuführen, wenn der Wert nicht null ist. Innerhalb des Blocks ist der Wert Nicht-Nullable und unter it verfügbar.
Dies ist ein häufig verwendetes Idiom für den Umgang mit optionalen Werten.
fun main() {
val email: String? = "a@b.com"
email?.let {
println("Sending to " + it)
}
}Alles zusammenführen
Ein kurzes Programm kann zeigen, wie Safe Call und Elvis zusammenarbeiten, um eine verständliche Nachricht zu erzeugen.
Beachten Sie, dass keine if-Anweisung erforderlich ist und der Code trotzdem keinen Null-Absturz verursachen kann.
fun main() {
val nickname: String? = null
val display = nickname?.uppercase() ?: "ANONYMOUS"
println(display)
}Welchen Operator wann verwenden?
Verwenden Sie ?., wenn ein Null-Ergebnis unproblematisch weitergegeben werden soll. Verwenden Sie ?:, wenn Sie null durch einen konkreten Standardwert ersetzen möchten.
Zusammen decken sie den Großteil der alltäglichen Nullbehandlung ab, ohne ausführliche Prüfungen zu benötigen.
val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0Schnelltest
Testen Sie Ihr Verständnis von Safe Calls und dem Elvis-Operator.
Zusammenfassung
Der Safe Call ?. ruft ein Member nur auf, wenn der Empfänger nicht null ist, und ergibt andernfalls null. Der Elvis-Operator ?: ersetzt null durch einen Ersatzwert.
Durch das Verketten beider Operatoren lässt sich die Nullability übersichtlich entfernen. Als Nächstes sehen Sie sich Scope-Funktionen wie let und also genauer an.
Häufig gestellte Fragen
Ist die Lektion „Sichere Aufrufe und Elvis“ kostenlos?
Ja — der vollständige Text von „Sichere Aufrufe und Elvis“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Sichere Aufrufe und Elvis“?
Die Operatoren ?. und ?:. Du übst Android 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 Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android 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 2 von 4.
Wie lange dauert die Lektion „Sichere Aufrufe und Elvis“?
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 Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android 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- und Non-Null-Typen
- Sichere Aufrufe und Elvis
- let, also und Scope-Funktionen
- NullPointerExceptions vermeiden