Псевдоним типа в Kotlin
Псевдоним типа подходит не только для коллекций и карт. Длинная запись функции с параметрами и результатом тоже может получить отдельное имя, чтобы сигнатуры не расползались по файлу.
Тип функции пишут в скобках: сначала параметры через
запятую, стрелка, затем тип результата. Слово
typealias связывает такую запись с коротким
именем:
typealias TextScore = (String) -> Int
fun scoreByLength(): TextScore {
return { text -> text.length }
}
Функция scoreByLength возвращает значение типа
TextScore - то есть другую функцию, которая
принимает строку и отдает число. Имя TextScore
можно ставить в параметрах и свойствах:
typealias TextScore = (String) -> Int
fun applyScore(rule: TextScore, line: String): Int {
return rule(line)
}
fun main() {
val rule: TextScore = { word -> word.length }
println(applyScore(rule, "kotlin"))
}
Переменная rule хранит лямбду, а вызов через
имя TextScore выглядит так же, как с полной
записью (String) -> Int. Компилятор считает
эти обозначения одним типом:
typealias TextScore = (String) -> Int
val vowelCount: TextScore = { text ->
var count = 0
for (ch in text) {
if (ch in "aeiou") {
count++
}
}
count
}
fun main() {
println(vowelCount("idea"))
}
Объявите псевдоним для функции из строки в число.
Сохраните в переменную правило, которое возвращает
длину слова. Для строки "api" выведите
результат применения правила.
Сделайте функцию с двумя параметрами: правило под
строку и сама строка. Передайте свое правило и
"log", выведите число, которое вернется.