Шаг 39.
Основы Kotlin.
Функции. Функции с возвращаемым типом Unit

    На этом шаге мы рассмотрим особенности применения этого типа.

    Не все функции возвращают значение. Некоторые производят иную работу, например, изменяют состояние переменной или вызывают другие функции, которые обеспечивают вывод данных. Например, код, отображающий состояние и ауру игрока, или функция castFireball(). Они объявлены без возвращаемого типа или значения и в своей работе используют println().

private fun castFireball(numFireballs: Int = 2) =
    println("A glass of Fireball springs into existence.(x$numFireballs)")

    В Kotlin подобные функции известны как функции с возвращаемым типом Unit. Мышкой выберите функцию castFireball() и через некоторое время увидите окно, подобное приведенному на рисунке 1, в котором IntelliJ отобразит тип возвращаемого значения:


Рис.1. castFireball() - функция с возвращаемым значением Unit

   

    Что это за тип такой - Unit? Kotlin использует тип Unit, чтобы обозначить функцию, которая не "возвращает" значения. Если ключевое слово return не используется, то считается, что функция возвращает значение типа Unit.

    Раньше, до Kotlin, многие языки сталкивались с проблемой описания функции, которая ничего не возвращает. Некоторые языки выбрали ключевое слово void, которое расшифровывается так: "возвращаемый тип отсутствует, пропустите его, так как он не применяется". Это достаточно очевидная мысль: если функция ничего не возвращает, то пропустите тип.

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

    Что общего у обобщенных функций с Unit или void? Языки, которые используют ключевое слово void, не обладают достаточными возможностями для работы с обобщенными функциями, которые не возвращают ничего. Void - это не тип. Фактически это ключевое слово сообщает: "информация о типе не имеет смысла; его можно пропустить". Поэтому у этих языков нет возможности описать обобщенную функцию, которая не возвращает ничего.

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

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




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