ENIGMA AI
ENIGMA AI
Kotlin Средний

Для чего нужны типы Unit и Nothing в Kotlin?

Unit и Nothing в Kotlin

Unit

Аналог void в Java, но является реальным типом.

fun printMessage(msg: String): Unit {
    println(msg)
}

// Unit можно опустить
fun printMessage(msg: String) {
    println(msg)
}

Когда Unit полезен:

// В generic-контекстах
interface Callback<T> {
    fun onResult(result: T)
}

class VoidCallback : Callback<Unit> {
    override fun onResult(result: Unit) {
        // Ничего не возвращаем
    }
}

// Лямбды
val action: () -> Unit = { println("Action") }

Nothing

Тип без значений — функция никогда не возвращается.

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

fun infiniteLoop(): Nothing {
    while (true) {
        // Бесконечный цикл
    }
}

Применение Nothing:

// 1. Elvis с throw
val name = user?.name ?: fail("User is null")
// name точно String, не String?

// 2. TODO()
fun notImplemented(): Int {
    TODO("Implement later")  // Возвращает Nothing
}

// 3. Типизация пустых коллекций
val emptyList: List<Nothing> = emptyList()
// Совместим с любым List<T>

Сравнение:

Тип Значения Использование
Unit Одно (Unit) Функции без результата
Nothing Ноль Функции без возврата
Any Все Базовый тип
Nothing? null Только null

Nothing в иерархии типов:

        Any
       /   \
   String  Int  ...
       \   /
      Nothing

Nothing — подтип всех типов, поэтому:

val x: String = TODO()  // OK — Nothing подтип String

Похожие вопросы

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы