Ответ
Nothing в Kotlin — это тип, который не имеет значений и используется для обозначения ситуаций, которые никогда не завершаются нормально (например, бесконечный цикл или исключение).
Поскольку Nothing является подтипом всех других типов (включая nullable), его можно использовать везде, где ожидается любой тип. Это полезно для:
- Функций, которые всегда бросают исключение (
throw). - Обобщённых функций, где нужно указать, что возврата нет.
Пример:
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
val result: String = fail("Error") // Корректно, т.к. функция никогда не вернёт значение Ответ 18+ 🔞
А, слушай, вот эта штука с Nothing в Kotlin — это вообще пиздец какой-то интересный концепт, прям мозг выносит, если вдуматься. Представь себе тип, у которого нихуя нет значений. Вообще. Ноль. Пустота. Как обещания политиков перед выборами.
И вот зачем это, спрашивается, нужно? Ну, например, когда у тебя есть функция, которая всегда, блядь, падает с ошибкой. Ну вот всегда, ёпта! Как будто ты пытаешься запустить старый движок в мороз — он только чихнёт и накрывается медным тазом. Вот ты пишешь fun fail(message: String): Nothing. И компилятору говоришь: "Слушай, чувак, эта хрень никогда нормально не закончится. Она только IllegalArgumentException тебе в ебальник бросит и всё".
И самое охуенное, что из-за этой её "никогда-не-возвращаемости", её можно присвоить куда угодно! Смотри:
val result: String = fail("Error") // Типа result — это строка
И компилятор не орёт! Он такой: "Ага, fail возвращает Nothing. А Nothing — это подтип всего на свете, даже String. Значит, с точки зрения типов — всё чисто, логично, можно спать спокойно". Хотя мы-то с тобой понимаем, что до этого присваивания дело никогда не дойдёт, потому что выполнение нахуй слетит с треском на предыдущей строчке. Но система типов — она же формальная, ей похуй на реальность, ей главное, чтобы в её абстрактном мире всё сходилось.
Это как если бы у тебя была коробка с надписью "В этой коробке лежит абсолютно всё, что угодно". Ты открываешь — а там пусто, потому что там лежит "ничего". Но поскольку "ничего" является подмножеством "всего", то надпись-то не врет! Вот такая, блядь, философская хуйня, прямо в коде.
Ещё это используют в дженериках, когда хотят явно сказать: "отсюда возврата нет, забудь". Типа тупиковая ветка в каком-нибудь when выражении или бесконечный цикл, который жрёт процессор, как не в себя. В общем, Nothing — это не про данные, это про намерения. Это такой крик в пустоту: "Ёб твою мать, здесь пути назад нет!". Очень выразительная штука, если использовать её к месту.