На этом шаге мы рассмотрим механизм возврата значения из анонимной функции.
Вы могли заметить, что ключевое слово return отсутствует в объявленной анонимной функции:
val greetingFunction: () -> String = { val currentYear = 2021 "Welcome to SimVillage, Mayor! (copyright $currentYear)" }
Однако функциональный тип явно показывает, что функция должна вернуть строку, а компилятор при этом не имеет возражений. Как можно судить по выводу, строка действительно была возвращена - и это приветствие мэра. Но как это возможно, если отсутствует ключевое слово return?
В отличие от именованной функции, анонимная функция не требует - а в редких случаях даже запрещает - использовать ключевое слово return для возврата данных. Анонимные функции неявно, или автоматически, возвращают результат выполнения последней инструкции в теле функции, позволяя отбросить ключевое слово return.
Эта особенность анонимных функций и удобна, и нужна для их синтаксиса. Ключевое слово return запрещено в анонимной функции, так как это создает двусмысленность для компилятора: из какой функции вернуть значение - из функции, в которой была вызвана анонимная функция, или из самой анонимной функции.
На следующем шаге мы рассмотрим функциональные аргументы.