Формулировка
Может быть неправильное понимание того, что такое функция высшего порядка :
GeeksForGeeks :
В Kotlin функция, которая может принимать функцию в качестве параметра или может возвращать функцию, называется функцией высшего порядка.
А теперь определение для функций:
Kotlinlang:
Kotlin функции являются первоклассными, что означает, что они могут храниться в переменных и структурах данных, передаваться в качестве аргументов и возвращаться из других функций более высокого порядка. Вы можете работать с функциями любым способом, который возможен для других нефункциональных значений.
Заключение
Функции могут быть переданы как методы в методы - столько, сколько вам нужно. High-order - это просто (описательный) тип, который означает, что ваш метод либо принимает функции в качестве параметров, либо возвращает функцию.
Пример:
fun <T> takeFiveFunctions(
block1 : () -> Unit,
block2 : (T) -> Unit,
block3 : () -> T,
block4 : (T) -> T,
block5 : (List<T>) -> T
) : Boolean = true
fun main() {
takeFiveFunctions<Int>(
block1 = { /*do something 1*/ },
block2 = { print(it) },
block3 = { 2 },
block4 = { it * 3 },
block5 = { it.first() }
)
}
РЕДАКТИРОВАТЬ
, но другой синтаксис говорит, что мы можем извлечь лямбду из скобок
Котлинланг говорит :
В Kotlin, существует соглашение: если последний параметр функции является функцией, то лямбда-выражение, переданное в качестве соответствующего аргумента, можно поместить за скобки:
Используя мой предыдущий пример, это будет выглядеть так:
fun main() {
takeFiveFunctions<Int>(
block1 = { /*do something 1*/ },
block2 = { print(it) },
block3 = { 2 },
block4 = { it * 3 }
) { it.first()}
}