Assertion auf Nicht-Null
Teil des Abschnitts Grundlagen der Kotlin-Journey von Coddy. Lektion 17 von 93.
Der Safe-Call-Operator und der Elvis-Operator behandeln Nullwerte problemlos, aber manchmal bist du dir an einer bestimmten Stelle in deinem Code absolut sicher, dass ein nullbarer Wert nicht null ist. Mit dem Nicht-null-Assertionsoperator !! kannst du Kotlin mitteilen: „Ich garantiere, dass dieser Wert nicht null ist.“
fun main() {
val name: String? = "Alice"
val length = name!!.length // Konvertiert String? zu String
println(length) // Gibt aus: 5
}Der Operator !! wandelt einen nullable Typ in sein nicht-nullbares Gegenstück um. Wenn der Wert jedoch tatsächlich null ist, stürzt dein Programm mit einer NullPointerException ab:
fun main() {
val name: String? = null
val length = name!!.length // Stürzt hier ab!
}Wann sollte man es verwenden: Verwende !! nur, wenn du über eine Logik verfügst, die garantiert, dass der Wert nicht null sein kann, der Compiler dies aber nicht überprüfen kann. In den meisten Fällen solltest du stattdessen sichere Aufrufe ?. oder den Elvis-Operator ?: bevorzugen. Die Nicht-null-Assertion sollte dein letzter Ausweg sein, nicht deine erste Wahl.
Aufgabe
EinfachSchreibe eine Funktion getUppercaseLength, die einen Parameter text entgegennimmt und die Länge seiner Großbuchstabenversion zurückgibt.
Die Funktion erhält einen Nicht-null-Stringwert, aber der Parametertyp ist nullable (String?). Verwende den Not-null-Assertionsoperator !!, um ihn in einen nicht-nullbaren Typ umzuwandeln, verkette dann die Methode uppercase() und ermittle die length.
Parameter:
text(String?): Ein nullable String, der garantiert einen Wert enthält
Rückgabe: Die Länge der Großbuchstabenversion des Textes (Int)
Hinweis: Bei dieser Herausforderung ist die Eingabe immer ein gültiger String und niemals
null. Dies simuliert ein Szenario, in dem du weißt, dass der Wert existiert, der Compiler dies jedoch nicht überprüfen kann.
Probier es selbst
fun getUppercaseLength(text: String?): Int {
// Schreibe hier den Code
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorErweiterte ZuweisungVergleichsoperatorenRückblick – Einfache Mathematik7Grundlegende Ein-/Ausgabe
println-FunktionString-VorlagenReadLine-EingabeTypkonvertierungWiederholung – Jahre bis zur RenteWiederholung – Wahr oder falsch10Funktionen
Eine Funktion deklarierenParameter und ArgumenteRückgabewerteBenannte ArgumenteStandardwerteFunktionen mit einem AusdruckRückblick – Sigma-FunktionRückblick – Validierungsfunktion2Variablen
Val vs VarTypinferenzZahlenStringBooleanNamenskonventionenRückblick – Variablen initialisieren5Operatoren Teil 2
Logische Operatoren Teil 1Logische Operatoren Teil 2Logische Operatoren Teil 3Ternär mit If-AusdruckWiederholung – Einfache Logik8Rechner zum Aufteilen der Rechnung
WillkommensnachrichtEingaben erfassen11FizzBuzz mit einer Wendung
SpielübersichtDie FizzBuzz-Funktion3Nullbarkeit
Was ist Null-Sicherheit?Nullable-TypenOperator für sicheren AufrufElvis-OperatorGrundlagen der FunktionsaufgabeAssertion auf Nicht-NullRückblick – Sicherer Zugriff6Entscheidungen treffen
If-AnweisungIf - ElseIf als AusdruckWhen-AusdruckWhen mit BereichenRückblick - Einfacher Taschenrechner9Schleifen
For-SchleifeWhile-SchleifeDo-While-SchleifeBreakContinueBereiche in SchleifenVerschachtelte SchleifeRückblick – FakultätRückblick – Dynamische EingabeÜbe selbstständig: Kotlin-Playground