Шаг 48.
Основы Kotlin.
Анонимные функции и функциональные типы. Функциональные типы

    На этом шаге мы рассмотрим задание таких типов.

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


Не путайте функциональные типы с типом Function. Функциональный тип определяет специфические особенности функции, такие как количество и типы входных параметров, а также тип возвращаемого значения. Скоро вы сможете в этом убедиться.

    Добавьте в SimVillage.kt объявление переменной, содержащей функцию, и присвойте ей анонимную функцию, возвращающую текст приветствия. Синтаксис выглядит незнакомым, но мы объясним его после того, как вы добавите код.

fun main() {
    val greetingFunction: () -> String = {
        val currentYear = 2021
        "Welcome to SimVillage, Mayor! (copyright $currentYear)"
    }

    println(greetingFunction())
}
Файл с проектом можно взять здесь.


Рис.1. Присваивание переменной анонимной функции (SimVillage.kt)

    Вы объявили переменную, за именем которой следует двоеточие и тип. Объявление

  greetingFunction: () -> String          ,
так же как объявление : Int, сообщает компилятору, значение какого типа может хранить переменная. Это функциональный тип : () -> String, который сообщает компилятору, какой тип функции может содержаться в переменной.

    Объявление функционального типа состоит из двух частей (рисунок 2): параметров функции в скобках и возвращаемого типа, следующего за стрелкой (->).


Рис.2. Синтаксис функционального типа

    Объявление типа переменной

  greetingFunction: () -> String
показывает, что компилятор может присвоить greetingFunction любую функцию, которая не принимает аргументов (пустые скобки) и возвращает String. Далее, как и в случаях с любыми другими объявлениями переменной, компилятор убедится, что функция, присвоенная переменной или переданная в качестве аргумента, принадлежит нужному типу.

    Запустите main(). Вывод не должен измениться.

  Welcome to SimVillage, Mayor! (copyright 2021)


Рис.3. Результат выполнения измененной функции приветствия (SimVillage.kt)

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




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