Что такое класс Unit

Ответ

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 был, прости господи, мартышлюшкой. А тут всё по-взрослому, с типами. Даже когда возвращать нечего.