Ответ
Unit в Kotlin — это аналог void в Java, но с ключевым отличием: это синглтон-объект, представляющий отсутствие значимого значения.
Особенности:
- Используется, когда функция ничего не возвращает (но технически возвращает
Unit). - Явное указание
Unitнеобязательно — компилятор подставляет его автоматически. - Полезен в generics, например,
Function<Int, Unit>.
Пример:
fun logMessage(message: String): Unit {
println(message)
// return Unit — неявно добавлено компилятором
}
Отличие от void:
Unit— это реальный тип (object Unit), аvoid— просто ключевое слово.- Позволяет единообразно работать с функциями в generics и функциональных цепочках.
Ответ 18+ 🔞
А, ну вот, опять про этот ваш Unit заговорили. Слушай, история-то вообще смешная, если вдуматься. Пришли джависты в котлин, такие: «Бля, а как тут ничего не возвращать? В джаве void — красота, понятно всё». А им такие: «А у нас, дружок, так не принято. У нас всё — объект, даже пустота».
И вот этот Unit — он типа как void, только не совсем. Вернее, совсем не void. Это такой объект-пустышка, синглтон, один на всю программу. И когда твоя функция вроде как ничего не возвращает, она на самом деле возвращает этого самого Unit. Компилятор, конечно, умный — он это сам подставит, можно не париться. Но суть-то в чём?
А суть в том, что с Unit можно работать в дженериках, в цепочках вызовов — везде, где нужен тип. void в джаве на такое не способен, он просто дыра в типизации. А тут — красота, единообразие. Функция что-то делает и возвращает Unit. Всё честно.
Вот смотри на пример, тут всё ясно:
fun logMessage(message: String): Unit {
println(message)
// return Unit — компилятор сам это добавит, ёпта
}
Видишь? Тип указан, но можно было и не указывать — компилятор и так понял бы. А теперь представь, что ты пишешь какую-нибудь хитрожопую функцию высшего порядка, которая принимает лямбду (Int) -> Что-то. И вот если «Что-то» может быть чем угодно, включая «ничего», то Unit тут просто незаменим. (Int) -> Unit — идеально. С void в такой ситуации была бы полная пизда рулю.
Короче, Unit — это не баг, это фича. Сначала кажется, что придумали велосипед, а потом понимаешь — нет, просто джавовый void был, прости господи, мартышлюшкой. А тут всё по-взрослому, с типами. Даже когда возвращать нечего.