Wyjaśnij, czym jest bezpieczeństwo null w języku Kotlin.
sobes.tech AI
Odpowiedź od AI
Bezpieczeństwo null — to funkcja języka Kotlin, która zapobiega błędom związanym z odwołaniami do null. Osiąga się to poprzez tworzenie dwóch typów odwołań: nullable (zezwalających na null) i non-nullable (niezezwalających na null).
Typy non-nullable są deklarowane jak zwykle:
var nonNullableString: String = "Hello" // Nie może być null
Typy nullable są deklarowane z użyciem symbolu ? po nazwie typu:
var nullableString: String? = "Hello" // Może być null
nullableString = null
Kotlin wymaga jawnego obsługiwania typów nullable, zapobiegając bezpośredniemu dostępowi do ich członków bez wcześniejszej kontroli na null. W tym celu udostępnia następujące mechanizmy:
-
Operator bezpiecznego wywołania (
?.): Wywołuje metodę lub odwołuje się do właściwości tylko wtedy, gdy obiekt nie jestnull. W przeciwnym razie zwracanull.val length = nullableString?.length // length będzie typu Int? lub null -
Operator Elvis (
?:): Dostarcza wartość domyślną, jeśli wyrażenie po lewej stronie operatora jestnull.val nonNullLength = nullableString?.length ?: 0 // nonNullLength będzie typu Int, 0 jeśli nullableString jest null -
Operator wymuszenia nie-null (
!!): Konwertuje typ nullable na non-nullable. Jeśli wartość jestnull, rzuca wyjątkiemNullPointerException. Używa się go, gdy programista jest pewien, że wartość nie jestnull.val sureLength = nullableString!!.length // Rzuci NullPointerException, jeśli nullableString jest null -
Sprawdzanie za pomocą if: Tradycyjna kontrola na
nullz użyciemif. Kompilator wykonuje tzw. smart cast (inteligentne rzutowanie) typu nullable na non-nullable wewnątrz blokuif, jeśli kontrola przejdzie.if (nullableString != null) { val length = nullableString.length // Tutaj nullableString jest traktowane jako String }
Mechanizmy te pozwalają na jawne zarządzanie sytuacjami, gdy zmienna może być null, co znacznie zmniejsza ryzyko wystąpienia NullPointerException podczas działania programu.