Шаг 53.
Основы Kotlin.
Анонимные функции и функциональные типы. Поддержка автоматического определения типов

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

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

    То есть анонимную функцию без аргументов, которую мы написали выше:

    val greetingFunction: () -> String = {
        val currentYear = 2021
        "Welcome to SimVillage, Mayor! (copyright $currentYear)"
    }
можно записать без определения типа:
    val greetingFunction = {
        val currentYear = 2021
        "Welcome to SimVillage, Mayor! (copyright $currentYear)"
    }

    Автоматическое определение типа работает, даже когда анонимная функция принимает один или более аргументов, но чтобы помочь компилятору определить тип переменной, следует указать имя и тип каждого параметра в объявлении анонимной функции.

    Измените объявление переменной greetingFunction(), чтобы задействовать автоматическое определение типов, указав тип каждого параметра в анонимной функции.

fun main() {
    val greetingFunction = { playerName: String, numBuildings: Int ->
        val currentYear = 2021
        println("Adding $numBuildings houses")
        "Welcome to SimVillage, $playerName! (copyright $currentYear)"
    }
   println(greetingFunction("Guyal", 2))
}
Файл с проектом можно взять здесь.


Рис.1. Использование автоматического определения типов в greetingFunction() (SimVillage.kt)

    Запустите SimVillage.kt и убедитесь, что все работает, как прежде.

    В сочетании с неявным возвратом автоматическое определение типа функции может сделать анонимную функцию сложной для понимания. Но если анонимная функция простая и ясная, автоматическое определение типов помогает сделать код более лаконичным.

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




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