Функция высшего порядка принимает или возвращает другую функцию; тип пишется как (A) -> B.
Разбор
fun List<Int>.sumBy(f: (Int) -> Int).
- Лямбды:
{ x -> x * 2 } или it.
- Trailing lambda:
list.map { }.
inline снижает стоимость лямбд.
Пример
fun <T> T.alsoIf(cond: Boolean, block: (T) -> Unit): T {
if (cond) block(this); return this
}
Итог
HOF + лямбды — основа идиоматичных коллекций и DSL.