Шаг 41.
Основы Kotlin.
Функции. Тип Nothing

    На этом шаге мы рассмотрим назначение этого типа и функцию TODO.

    На предыдущих шагах мы познакомились с типом Unit и узнали, что функции с таким типом ничего не возвращают.

    Есть другой тип, похожий на Unit. Это тип Nothing (Ничего). Как и Unit, тип Nothing показывает, что функция ничего не возвращает, но на этом их сходство заканчивается. Nothing говорит компилятору, что функция гарантированно не выполнится успешно; функция либо вызовет исключение, либо по какой-нибудь другой причине никогда не вернет управление вызова.

    Зачем нужен тип Nothing? Одним из примеров использования этого типа может служить функция TODO (надо сделать), которая входит в стандартную библиотеку языка Kotlin.

    TODO возбуждает исключение - иначе говоря, функция гарантированно завершится ошибкой - она возвращает тип Nothing.

    Когда надо использовать TODO? Ответ кроется в ее названии: оно говорит вам, что "надо сделать" ("to do"). Вот, например, следующая функция, которую еще предстоит реализовать, но пока она просто вызывает TODO:

fun shouldReturnAString(): String {
  TODO("implement the string building functionality here to return a string")
}


Рис.1. Функция TODO

    Разработчик знает, что функция shouldReturnAString() должна вернуть строку (String), но пока отсутствуют другие функции, необходимые для ее реализации. Обратите внимание, что возвращаемое значение для shouldReturnAString() - это String, но на самом деле функция ничего не возвращает. Из-за возвращаемого значения TODO это абсолютно нормально.

    Возвращаемый тип Nothing у TODO показывает компилятору, что функция гарантированно вызовет ошибку, поэтому проверять возвращаемое значение после TODO не имеет смысла, так как shouldReturnAString() ничего не вернет. Компилятор доволен, а разработчик может продолжать разработку, отложив на потом реализацию функции shouldReturnAString().

    Другая полезная при разработке особенность Nothing заключается в возможности добавить код после вызова TODO. В этом случае компилятор выведет предостережение, что этот код недостижим (рисунок 2).


Рис.2. Недостижимый код

    Благодаря возвращаемому типу Nothing компилятор может сделать следующий вывод: он знает, что TODO завершится с ошибкой, поэтому и весь код после TODO не будет выполнен.

    На следующем шаге мы рассмотрим функции уровня файла в Java.




Предыдущий шаг Содержание Следующий шаг