На этом шаге мы рассмотрим использование автоматического определения типов в анонимных функциях.
Автоматическое определение типов в языке 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 и убедитесь, что все работает, как прежде.
В сочетании с неявным возвратом автоматическое определение типа функции может сделать анонимную функцию сложной для понимания. Но если анонимная функция простая и ясная, автоматическое определение типов помогает сделать код более лаконичным.
На следующем шаге мы рассмотрим объявление функции, которая принимает функцию.