На этом шаге мы рассмотрим назначение этого типа и функцию 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.