Тип Unit

Тип Unit в Kotlin представляет отсутствие значимой информации и используется как возвращаемый тип функций, которые не возвращают значения. Каждая функция в Kotlin должна возвращать какое-либо значение, и когда функция не возвращает ничего значимого, она неявно возвращает единственное значение типа Unit.

Единственное значение

Тип Unit имеет только одно значение - Unit. Это значение возвращается неявно функциями, которые не указывают другой возвращаемый тип.

kotlinval unitValue: Unit = Unit
println(unitValue)

Результат выполнения кода:

kotlinkotlin.Unit

Неявное возвращение Unit

Когда функция не указывает возвращаемый тип и не возвращает значение явно, она автоматически возвращает Unit:

kotlinfun printMessage(message: String) {
  println(message)
}

val result: Unit = printMessage("Hello")
println(result)

Результат выполнения кода:

kotlinHello
kotlin.Unit

Явное указание Unit

Можно явно указать Unit как возвращаемый тип функции:

kotlinfun processData(data: String): Unit {
  println("Processing: $data")
}

val res: Unit = processData("test")
println(res)

Результат выполнения кода:

kotlinProcessing: test
kotlin.Unit

Использование в generics

Тип Unit часто используется в обобщенных типах, когда нужно указать, что операция не возвращает значимого результата:

kotlininterface Processor<T> {
  fun process(item: T): Unit
}

class StringProcessor : Processor<String> {
  override fun process(item: String): Unit {
    println("Processing string: $item")
  }
}

val processor = StringProcessor()
val output: Unit = processor.process("example")

Сравнение с void

В отличие от void в Java, который означает "вообще ничего не возвращается", Unit в Kotlin является полноценным типом с одним значением. Это позволяет использовать его в обобщенных конструкциях и обеспечивает консистентность type system.

kotlin// В Java: public void doSomething() { }
// В Kotlin: fun doSomething(): Unit { }

Пример

Функции, возвращающие Unit, могут быть использованы в цепочках вызовов, но их результат будет игнорироваться:

kotlinfun setupConfig(): Unit {
  println("Configuration setup")
}

fun initialize(): Unit {
  println("Initialization complete")
}

fun main() {
  setupConfig()
    .also { println("Config result: $it") }
    .let { initialize() }
}

main()

Результат выполнения кода:

kotlinConfiguration setup
Config result: kotlin.Unit
Initialization complete

Смотрите также

  • тип Any,
    который является корневым типом в иерархии классов Kotlin
  • тип Nothing,
    который представляет значение, которое никогда не существует
  • тип Boolean,
    который представляет логические значения true и false