Назад к вопросам
Junior
130
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Null safety — это функция языка 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. Оператор Elvis (?:): Предоставляет значение по умолчанию, если выражение слева от оператора null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength будет Int, 0 если nullableString null
    
  3. Оператор not-null assertion (!!): Преобразует nullable тип в non-nullable. Если значение null, выбрасывается NullPointerException. Используется, когда разработчик уверен, что значение не null.

    val sureLength = nullableString!!.length // Выбросит NullPointerException если nullableString null
    
  4. if-проверки: Традиционная проверка на null с помощью if. Компилятор smart casts (умно приводит) nullable тип к non-nullable внутри блока if, если проверка на null прошла.

    if (nullableString != null) {
        val length = nullableString.length // Здесь nullableString рассматривается как String
    }
    

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