Asercja wartości niebędącej null
Część sekcji Podstawy ścieżki Kotlin w Coddy. Lekcja 17 z 93.
Operator bezpiecznego wywołania i operator Elvis obsługują wartości null w bezpieczny sposób, ale czasami masz absolutną pewność, że w określonym miejscu kodu wartość dopuszczająca null nie jest null. Operator asercji nie-null !! pozwala powiedzieć Kotlinowi: „Gwarantuję, że ta wartość nie jest null”.
fun main() {
val name: String? = "Alice"
val length = name!!.length // Konwertuje String? na String
println(length) // Wypisuje: 5
}Operator !! konwertuje typ dopuszczający wartość null na jego odpowiednik niedopuszczający wartości null. Jeśli jednak wartość faktycznie wynosi null, program ulegnie awarii z błędem NullPointerException:
fun main() {
val name: String? = null
val length = name!!.length // Tutaj występuje błąd!
}Kiedy go używać: Używaj !! tylko wtedy, gdy masz logikę gwarantującą, że wartość nie może być null, ale kompilator nie może tego zweryfikować. W większości przypadków zamiast tego wybieraj bezpieczne wywołania ?. lub operator Elvis ?:. Asercja niepustości powinna być ostatecznością, a nie pierwszym wyborem.
Wyzwanie
ŁatwyNapisz funkcję getUppercaseLength, która przyjmuje parametr text i zwraca długość jego wersji zapisanej wielkimi literami.
Funkcja otrzymuje wartość typu string, która nie jest null, ale typ parametru jest nullable (String?). Użyj operatora asercji o niepustej wartości !!, aby przekonwertować ją na typ non-nullable, a następnie wywołaj metodę uppercase() i pobierz length.
Parametry:
text(String?): Wartość typu string nullable, która na pewno zawiera wartość
Zwraca: Długość wersji tekstu zapisanej wielkimi literami (Int)
Uwaga: W tym wyzwaniu dane wejściowe zawsze będą prawidłowym stringiem, nigdy wartością
null. To symuluje sytuację, w której wiesz, że wartość istnieje, ale kompilator nie może tego zweryfikować.
Spróbuj swoich sił
fun getUppercaseLength(text: String?): Int {
// Napisz tutaj kod
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory – część 1
Operatory arytmetyczneOperator moduloPrzypisanie z operatoremOperatory porównaniaPowtórka – proste działania matematyczne7Podstawowe wejście/wyjście
Funkcja printlnSzablony ciągów znakówWczytywanie danych przez ReadLineKonwersja typówPowtórka — lata do emeryturyPowtórka — prawda czy fałsz10Funkcje
Deklarowanie funkcjiParametry i argumentyWartości zwracaneArgumenty nazwaneWartości domyślneFunkcje z pojedynczym wyrażeniemPowtórka – funkcja SigmaPowtórka – funkcja walidująca2Zmienne
Val a VarWnioskowanie o typieLiczbyŁańcuch znakówWartość logicznaKonwencje nazewnictwaPowtórzenie – inicjalizacja zmiennych5Operatory, część 2
Operatory logiczne, część 1Operatory logiczne, część 2Operatory logiczne, część 3Operator trójargumentowy z wyrażeniem ifPowtórka — prosta logika8Kalkulator podziału rachunku
Wiadomość powitalnaPobieranie danych11FizzBuzz z niespodzianką
Omówienie gryFunkcja FizzBuzz3Obsługa wartości null
Czym jest bezpieczeństwo nullTypy dopuszczające nullOperator bezpiecznego wywołaniaOperator ElvisPodstawy wyzwania z funkcjamiAsercja wartości niebędącej nullPodsumowanie — bezpieczny dostęp6Podejmowanie decyzji
Instrukcja ifIf - elseIf jako wyrażenieWyrażenie whenWhen z zakresamiPowtórka — prosty kalkulator9Pętle
Pętla forPętla whilePętla do-whileBreakContinueZakresy w pętlachPętla zagnieżdżonaPowtórka – silniaPowtórka – dynamiczne wprowadzanie danychPoćwicz samodzielnie: Edytor online Kotlin