Skip to content

Instantly share code, notes, and snippets.

@ievetrov
Last active October 15, 2025 08:25
Show Gist options
  • Save ievetrov/1dcca1d76c57b9268ac026b6391c3d09 to your computer and use it in GitHub Desktop.
Save ievetrov/1dcca1d76c57b9268ac026b6391c3d09 to your computer and use it in GitHub Desktop.
null_safety.md

Способы обработки nullable в Kotlin

Kotlin предлагает несколько мощных механизмов для безопасной работы с nullable типами, чтобы избежать NullPointerException. Вот основные способы обработки null:

Проверка на null

Прямая проверка на null позволяет безопасно работать с переменными, которые могут быть null.

val name: String? = getName() // Может вернуть null
if (name != null) {
    println(name.length) // Безопасный вызов, так как проверили на null
}

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

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

val length = name?.length // Вернет "null", если name равно null

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

Используется для предоставления альтернативного значения в случае, если выражение слева от ?: равно null.

val length = name?.length ?: 0 // Вернет 0, если name равно null

Принудительный вызов (!!)

Оператор !! (утверждение "это не null") преобразует любой тип, допускающий null, в его ненуллабельный эквивалент. Если переменная окажется null, это приведет к NullPointerException. Рекомендуется использовать крайне редко и осознанно.

val length = name!!.length // Выбросит NullPointerException, если name равно null

Безопасный каст (as?)

Безопасное приведение типа пытается привести объект к указанному типу, возвращая null, если приведение невозможно.

val x: String? = y as? String // Вернет null, если y не является строкой

Приведение типов с проверкой на null

При работе с параметризованными типами и дженериками можно использовать ограничения типа, чтобы обеспечить работу только с ненуллабельными типами.

fun <T: Any> printLength(item: T) { // Допускается только ненуллабельный тип
    println(item.toString().length)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment