Функции первого порядка от обычных функций отличаются тем,
что могут принимать функции в качестве параметров и возвращать функции. В данных
функциях в качестве типа принимаемого аргумента функции указывается сигнатура
функции.
Сигнатурой функции является список аргументов и тип
возвращаемого значения функции.
Ниже приведён пример объявления функции первого порядка,
который принимает два параметра, оба параметра должны быть функциями, первый
функция которая не принимает параметров и не должна возвращать значения, вторая
функция должна принимать два параметра типа Int и должна вернуть значение также типа Int (целое число), которое
затем выводится в консоли:
fun higherOrderFunction(simpleFun: () -> Unit, withArgs: (Int, Int) -> Int) {
// Вызывается первый параметр в виде функции
simpleFun()
// Вызывается второй параметр в виде функции с передачей двух параметров типа Int, чей результат затем выводится в консоль
println(withArgs(10, 20))
}
Вызов подобной функции осуществляется подобным образом. В
качестве кода функции передаются лямбда выражения, которые передаются в виде
кода для выполнения.
В примере, функция переданная в качестве первого параметра
выводит простой текст в консоль, а вторая функция должна получить два параметра
с точки вызова и затем вывести их в консоль через println и
вернуть сумму этих двух параметров. В лямбда выражениях последняя строка выполняет
роль возврата значения, в данном случае он выглядит как a+b:
higherOrderFunction({
println("This is function without params")
},
{ a: Int, b: Int -> Int
println("Params are: a = $a, b = $b")
a+b
})
Реклама