Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpTpNt 121 of 299 menu
◀ ▶

Тип без значения в Kotlin

Большинство выражений в Kotlin имеют тип результата: строка, число, объект. Есть редкий случай, когда выражение не завершается возвратом значения - оно бросает исключение или крутится без конца.

Для таких выражений в языке есть тип Nothing. У него нет ни одного допустимого значения, зато он помогает компилятору понимать ветки, где выполнение обрывается:

fun stopWith(message: String): Nothing { throw IllegalStateException(message) } fun main() { stopWith("broken rule") }

Функция stopWith объявлена с результатом Nothing, потому что после throw управление не возвращается к вызывающему коду. Любая попытка использовать результат такой функции как обычное значение не имеет смысла:

fun requireText(value: String?): String { return value ?: stopWith("text required") } fun stopWith(message: String): Nothing { throw IllegalStateException(message) } fun main() { println(requireText("ok")) }

Оператор ?: справа стоит вызов с типом Nothing. Компилятор знает, что при null слева программа прервется, а при ненулевом значении вернется строка. Поэтому вся функция requireText имеет тип String, а не объединение со Nothing:

fun pickLabel(code: String?): String { return code ?: stopWith("code missing") } fun stopWith(message: String): Nothing { throw IllegalArgumentException(message) } fun main() { val label = pickLabel("A-1") println(label) }

Сделайте функцию, которая принимает nullable-число и возвращает обычное число. Если аргумент равен null, выполнение должно завершиться ошибкой с вашим текстом. Для 12 выведите результат.

Напишите функцию без результата, которая всегда уходит в бесконечный цикл. Укажите у нее тип Nothing. В main сохраните ссылку на нее в переменную и убедитесь, что код компилируется.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить