← Назад к вопросам

Что такое тип Nothing?

1.8 Middle🔥 71 комментариев
#Kotlin основы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Тип Nothing в Kotlin

Nothing — это особый тип в системе типов Kotlin, который представляет значение, которое никогда не существует. Это один из наиболее интересных и часто неправильно понимаемых типов в языке. Nothing используется компилятором для обозначения функций или выражений, которые никогда не завершаются нормально.

Основные характеристики Nothing

Nothing — это тип без значений. Никакой объект не может быть экземпляром этого типа, потому что он не имеет конструктора и не может быть инстанцирован. Это подтип всех остальных типов в Kotlin, что означает, что Nothing можно использовать там, где ожидается любой другой тип.

Когда используется Nothing

Функции, которые никогда не возвращают значение (то есть выбрасывают исключение или работают в бесконечном цикле), имеют возвращаемый тип Nothing:

fun throwException(): Nothing {
    throw IllegalArgumentException("Это исключение")
}

fun infiniteLoop(): Nothing {
    while (true) {
        // бесконечный цикл
    }
}

Nullable вариант — Nothing?

Kotlin также предоставляет Nothing? — это тип, который может содержать только значение null. Это полезно для переменных, которые гарантированно содержат null:

val nullValue: Nothing? = null

Практическое применение

  1. Обработка ошибок. Функции, которые всегда выбрасывают исключения, помечаются как Nothing. Это помогает компилятору понять, что код после вызова такой функции недостижим.

  2. Проверка типов при компиляции. Because Nothing является подтипом всех типов, можно использовать в контрактах типов и обобщениях (generics) для большей гибкости.

  3. Пустые коллекции. Nothing используется в некоторых случаях при работе с обобщённых типов, где нет конкретного типа элементов.

Пример с при работе с исключениями

fun main() {
    val age = -5
    check(age >= 0) { "Возраст не может быть отрицательным" }
    println(age)
}

Отличие от Unit

Часто Nothing путают с Unit. Различие в том, что:

  • Unit — это тип функций, которые ничего не возвращают, но всё равно завершаются (аналог void в Java)
  • Nothing — это тип функций, которые никогда не завершаются нормально

Unit имеет единственное значение (также называется Unit), в то время как Nothing не имеет никаких значений.

Заключение

Понимание Nothing важно для написания типо-безопасного кода на Kotlin. Хотя Nothing редко используется явно в повседневной разработке, понимание его сути помогает лучше разобраться в системе типов Kotlin и написать более надёжный код.

Что такое тип Nothing? | PrepBro