Запись на курсы по HTML, CSS, JavaScript, PHP, Python, фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
10 of 1310 menu
Новый формат обучения! Репетиторство по программированию. Есть еще 3 свободных места! Жми для подробностей.

Значение null

Значение null в Kotlin представляет отсутствие значения у переменной. По умолчанию переменные в Kotlin не могут хранить null, что предотвращает ошибки при обращении к неинициализированным объектам. Для объявления переменных, которые могут содержать null, используется специальный синтаксис с добавлением знака вопроса после типа.

Объявление nullable-переменных

var name: String? = null var age: Int? = null var list: List<String>? = null

Безопасный вызов (?.)

Оператор безопасного вызова ?. позволяет вызывать методы у объекта только если он не равен null. Если объект равен null, выражение вернет null:

val text: String? = "hello" val length: Int? = text?.length println(length)

Результат выполнения кода:

Int 5
val text: String? = null val length: Int? = text?.length println(length)

Результат выполнения кода:

null

Оператор Элвиса (?:)

Оператор Элвиса ?: позволяет указать значение по умолчанию на случай, если выражение слева равно null:

val text: String? = null val length: Int = text?.length ?: 0 println(length)

Результат выполнения кода:

Int 0

Оператор утверждения non-null (!!)

Оператор !! преобразует любое значение в non-null тип и выбрасывает исключение NullPointerException, если значение равно null:

val text: String? = "hello" val length: Int = text!!.length println(length)

Результат выполнения кода:

Int 5
val text: String? = null try { val length: Int = text!!.length println(length) } catch (e: NullPointerException) { println("NullPointerException caught") }

Результат выполнения кода:

String "NullPointerException caught"

Проверка на null в условии

Kotlin автоматически приводит тип к non-null после проверки на null в условии:

val text: String? = "hello" if (text != null) { val length: Int = text.length println(length) } else { println("text is null") }

Результат выполнения кода:

Int 5

Безопасное приведение типов (as?)

Оператор as? выполняет безопасное приведение типа и возвращает null, если приведение невозможно:

val obj: Any = "hello" val str: String? = obj as? String val num: Int? = obj as? Int println(str) println(num)

Результат выполнения кода:

String "hello" null

Функция let для nullable-типов

Функция let выполняет блок кода только если значение не равно null:

val text: String? = "hello" text?.let { val length = it.length println("Length: $length") }

Результат выполнения кода:

String "Length: 5"

Смотрите также

  • функцию let,
    которая выполняет действия со значениями
  • функцию also,
    которая выполняет дополнительные действия с объектом
  • функцию run,
    которая выполняет блок кода с контекстом объекта