Sobes.tech
Junior

Обяснете какво е null safety в езика Kotlin.

sobes.tech AI

Отговор от AI

Безопасност при null — това е функция на езика Kotlin, която предотвратява грешки, свързани с null препратки. Тя се постига чрез създаване на два типа препратки: nullable (разрешава null) и non-nullable (не разрешава null).

Non-nullable типовете се обявяват както обикновено:

var nonNullableString: String = "Hello" // Не може да бъде null

Nullable типовете се обявяват с използване на символа ? след името на типа:

var nullableString: String? = "Hello" // Може да бъде null
nullableString = null

Kotlin изисква явна обработка на nullable типовете, предотвратявайки директен достъп до техните членове без предварителна проверка за null. За това се използват следните механизми:

  1. Оператор за безопасно извикване (?.): Извиква метод или достъпва свойство само ако обектът не е null. В противен случай връща null.

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

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength ще бъде `Int`, 0 ако nullableString е null
    
  3. Оператор за потвърждение на ненулевост (!!): Преобразува nullable тип в non-nullable. Ако стойността е null, се хвърля изключение NullPointerException. Използва се, когато разработчикът е сигурен, че стойността не е null.

    val sureLength = nullableString!!.length // Ще хвърли NullPointerException ако nullableString е null
    
  4. Проверки с if: Традиционна проверка за null с if. Компилаторът извършва т.нар. smart cast (умно преобразуване) на nullable типа в non-nullable вътре в блока if, ако проверката премине.

    if (nullableString != null) {
        val length = nullableString.length // Тук nullableString се третира като String
    }
    

Тези механизми позволяват явно управление на ситуации, когато променливата може да бъде null, което значително намалява вероятността от възникване на NullPointerException по време на изпълнение.