Sobes.tech
Junior

Какви са 'nullable' типовете в Kotlin и как функционират?

sobes.tech AI

Отговор от AI

Nullable типовете в Kotlin са типове, които могат да съдържат както стойност, така и null. Те се обозначават явно със символа ? след името на типа.

Работата се базира на системата от типове на Kotlin, която предотвратява NullPointerException по време на компилация. Компилаторът изисква явна проверка за null преди да се достъпят членовете на nullable обект.

Основните начини за безопасна работа с nullable типове са:

  • Проверка за null с if:

    fun printLength(str: String?) {
        if (str != null) {
            println(str.length) // Безопасно извикване след проверка за null
        } else {
            println("Стринг null")
        }
    }
    
  • Оператор за безопасно извикване (?.): Връща null, ако обектът е null, иначе резултата от извикването.

    val safeLength: Int? = str?.length // Ако str е null, safeLength ще бъде null
    
  • Оператор Елвис (?:): Позволява да се предостави стойност по подразбиране, ако изразът отляво е null.

    val lengthOrDefault: Int = str?.length ?: 0 // Ако str е null, lengthOrDefault ще бъде 0
    
  • Оператор за явно не-null твърдение (!!): Преобразува nullable тип в не-nullable. Трябва да се използва с внимание, тъй като ще изхвърли NullPointerException, ако стойността е null.

    val assertedLength: Int = str!!.length // Ще изхвърли NPE, ако str е null
    
  • Функции let/run/apply/also с безопасно извикване:

    str?.let {
        // Кодът ще се изпълни само ако str не е null
        println("Дължината на стринга: ${it.length}")
    }
    

Системата от nullable типове в Kotlin значително повишава безопасността и намалява вероятността от NullPointerException в сравнение с езици, където null може да бъде присвоен на всеки тип без явна индикация.