Sobes.tech
Junior

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:

  1. Operator bezpiecznego wywołania (?.): Wywołuje metodę lub odwołuje się do właściwości tylko wtedy, gdy obiekt nie jest null. W przeciwnym razie zwraca null.

    val length = nullableString?.length // length będzie typu Int? lub null
    
  2. Operator Elvis (?:): Dostarcza wartość domyślną, jeśli wyrażenie po lewej stronie operatora jest null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength będzie typu Int, 0 jeśli nullableString jest null
    
  3. Operator wymuszenia nie-null (!!): Konwertuje typ nullable na non-nullable. Jeśli wartość jest null, rzuca wyjątkiem NullPointerException. Używa się go, gdy programista jest pewien, że wartość nie jest null.

    val sureLength = nullableString!!.length // Rzuci NullPointerException, jeśli nullableString jest null
    
  4. Sprawdzanie za pomocą if: Tradycyjna kontrola na null z użyciem if. Kompilator wykonuje tzw. smart cast (inteligentne rzutowanie) typu nullable na non-nullable wewnątrz bloku if, 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.