Что такое Nothing

Ответ

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

Пример:

fun fail(message: String): Nothing {  
    throw IllegalArgumentException(message)  
}  

fun main() {  
    val result = fail("Error") // Тип `result` — `Nothing`  
}  

Особенности:

  • Подтип всех типов (Nothing? совместим с любым nullable-типом).
  • Используется для TODO() и других функций, которые не завершаются нормально.

Ответ 18+ 🔞

А, слушай, про этот ваш Nothing в Kotlin. Ну тип, который как бы есть, но его в то же время и нету. Представь себе обещание вернуть тебе тысячу баксов, а потом такой: «Ой, всё, я сгорел». Вот это оно и есть, Nothing — обещание, которое нихуя не выполнится.

Короче, пример, чтобы не быть голословным:

fun fail(message: String): Nothing {  
    throw IllegalArgumentException(message)  
}  

fun main() {  
    val result = fail("Error") // Тип `result` — `Nothing`  
}  

Смотри, что тут происходит. Функция fail объявляет: «Я верну Nothing». А Nothing — это типа «ничего, абсолюти нихуя, ваще пустота». И как она это делает? Да просто кидает исключение нахуй! Программа до return не доживает, она вся в говне. И компилятор это понимает. Поэтому в main переменная result получает этот магический тип Nothing.

А теперь, ёпта, особенности, от которых мозг может слегка ебнуться:

  • Подтип всего на свете. Это самый главный прикол. Nothing — это как универсальный донор в мире типов. Его можно присвоить куда угодно: String?, Int?, List<Any>? — да похуй, везде влезет. Потому что если что-то имеет тип Nothing, то этого что-то никогда не произойдёт, и проверять на null уже не надо. Гениально и немного по-хулигански.
  • Используется для TODO() и прочей дичи. Загляни в исходники — TODO() как раз возвращает Nothing. Она кидает исключение NotImplementedError. То есть ты ставишь заглушку, компилятор видит, что функция в теории ничего не вернёт (потому что кинет ошибку), и успокаивается. Удобно, блядь.

Короче, Nothing — это не про данные, это про намерение нихуя не вернуть. Инструмент для краевых случаев, но чертовски полезный, когда понимаешь, как его применять. Без него система типов была бы неполной, как бутерброд без колбасы — хлеб есть, а главного нихуя нет.