Ответ
Nothing в Kotlin — это специальный тип, который означает "никогда не существует". Он используется для обозначения функций, которые никогда не возвращают результат (например, бросают исключение или зацикливаются бесконечно).
Пример:
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
Ключевые особенности:
- Все функции, возвращающие
Nothing, должны завершаться ненормально - Является подтипом всех других типов (можно использовать везде)
- Полезен для функций-заглушек или обработки ошибок
В отличие от Unit (который означает "нет значимого результата"), Nothing означает полное отсутствие значения.
Ответ 18+ 🔞
А, слушай, вот это тема интересная, про Nothing в Kotlin. Ну, типа, представь себе такого пидараса шерстяного, который обещал принести пива, но вместо этого просто вышел в окно с пятого этажа. Вот Nothing — это примерно так.
Это не Unit, который как будто пришёл, молча кивнул и ушёл — результат есть, просто он пустой. Nothing — это когда чувак вообще нихуя не вернул. Ни результата, ни даже намёка. Полный абзац.
Вот смотри на этот код, тут всё понятно:
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
Видишь? Функция fail объявлена как возвращающая Nothing. И она реально, блядь, никогда не вернёт управления! Она просто ёбнет исключение — и всё, приехали. Или, например, может впасть в бесконечный цикл и зависнуть нахуй. Главное — нормального завершения не будет никогда. Вот в этом весь прикол.
А фишка-то какая, ёпта? А фишка в том, что Nothing — это подтип вообще всего. Как будто самый младший пацан в семье, который ко всем старшим братьям может примазаться. Его можно использовать везде, где ожидается String, Int или даже твой собственный тип КлассныйОбъект. Компилятор это схавает и скажет: «А, ну окей, раз тут Nothing, значит, выполнение сюда никогда не дойдёт, так что похуй, какой тип ожидался».
Полезно это, например, когда пишешь какую-нибудь хелпер-функцию для паники, как fail выше. Или заглушку, которую пока не реализовал, но хочешь, чтобы проект хотя бы компилировался. Вместо того чтобы возвращать какой-то левый null или фейковое значение, ты просто говоришь: «Здесь будет Nothing, потому что сюда код не должен попадать». Компилятор это понимает и дальше по коду может умные выводы делать.
Короче, Nothing — это не «ничего» в смысле пустоты. Это «НИЧЕГО» в смысле «забей, чувак, этого никогда не случится, тут либо всё упадёт, либо зависнет навечно». Доверия к таким функциям — ноль ебать, но зато честно.