Sobes.tech
Junior

Czym są typy 'nullable' w Kotlin i jak one działają?

sobes.tech AI

Odpowiedź od AI

Typy nullable w Kotlinie to typy, które mogą zawierać zarówno wartość, jak i null. Są one wyraźnie oznaczone symbolem ? po nazwie typu.

Działanie opiera się na systemie typów Kotlin, który zapobiega NullPointerException podczas kompilacji. Kompilator wymaga jawnej kontroli null przed dostępem do członków obiektu typu nullable.

Główne sposoby bezpiecznej pracy z typami nullable:

  • Sprawdzanie null za pomocą if:

    fun printLength(str: String?) {
        if (str != null) {
            println(str.length) // Bezpieczne wywołanie po sprawdzeniu null
        } else {
            println("String null")
        }
    }
    
  • Operator bezpiecznego wywołania (?.): Zwraca null, jeśli obiekt jest null, w przeciwnym razie wynik wywołania.

    val safeLength: Int? = str?.length // Jeśli str jest null, safeLength będzie null
    
  • Operator Elvisa (?:): Pozwala na podanie wartości domyślnej w przypadku, gdy wyrażenie po lewej stronie operatora jest null.

    val lengthOrDefault: Int = str?.length ?: 0 // Jeśli str jest null, lengthOrDefault będzie 0
    
  • Operator jawnego nie-null (!!): Konwertuje nullable typ na nie-nullable. Należy używać ostrożnie, ponieważ wyrzuci NullPointerException, jeśli wartość będzie null.

    val assertedLength: Int = str!!.length // Wyrzuci NPE, jeśli str jest null
    
  • Funkcje let/run/apply/also z bezpiecznym wywołaniem:

    str?.let {
        // Kod wykona się tylko, jeśli str nie jest null
        println("Długość łańcucha: ${it.length}")
    }
    

System nullable typów Kotlin znacząco zwiększa bezpieczeństwo i zmniejsza prawdopodobieństwo wystąpienia NullPointerException w porównaniu z językami, w których null może być przypisany do dowolnego typu bez wyraźnego oznaczenia.