Лямбда — это функция, у которой нет имени. Лямбда-выражение (Lambda) в Kotlin определяется с помощью фигурных скобок {}, которые принимают переменную в качестве параметра (если есть) и тела функции. Тело функции записывается после переменной (если она есть), за которой следует оператор ->.
Синтаксис
{ variable -> body_of_function}
Прежде чем мы поговорим о лямбде, давайте посмотрим на простой пример сложения двух чисел с использованием обычной функции.
Обычная функция: сложение двух чисел
В этом примере мы создаем функцию addNumber(), передающую два аргумента(a,b), вызывающую из основной функции.
fun main(args: Array){
addNumber(5,10)
}
fun addNumber(a: Int, b: Int){
val add = a + b
println(add)
}
Выход:
15
Лямбда-функция: сложение двух чисел
Приведенная выше программа будет переписана с использованием лямбда-функции следующим образом:
fun main(args: Array){
val myLambda:(Int) -> Unit= {s: Int -> println(s) } //lambda function
addNumber(5,10,myLambda)
}
fun addNumber(a: Int, b: Int, mylambda:(Int) -> Unit ){ //high level function lambda as parameter
val add = a + b
mylambda(add) // println(add)
}
Выход:
15
В приведенной выше программе мы создаем лямбда-выражение {s: Int -> println(s)} с возвращаемым типом Unit. Лямбда-функция в Котлин дополняется как параметр высокоуровневой функции addNumber(5,10,myLambda). Переменная mylambda в определении функции на самом деле является лямбда-функцией. Функциональность(тело) mylambda уже задана в лямбда-функции.
Функция высшего порядка
Функция высшего порядка (функция более высокого уровня) в Kotlin — это функция, которая принимает функцию в качестве параметра или возвращает функцию, или может делать и то, и другое. Это означает, что вместо передачи Int, String или других типов в качестве параметра функции мы можем передать функцию в качестве параметра другой функции.
Давайте посмотрим на следующий пример:
fun myFun(org: String,portal: String, fn:(String,String) -> String): Unit {
val result = fn(org,portal)
println(result)
}
В приведенном выше примере мы определили функцию myFun() с тремя параметрами. Первый и второй параметр принимают строку, а третий параметр — тип функции от строки к строке. Параметр String to String type означает, что функция принимает строку в качестве входных данных и возвращает выходные данные в виде строковых типов.
Чтобы вызвать эту вышеприведенную функцию, мы можем передать литерал функции или лямбда. Например:
fun myFun(org: String,portal: String, fn:(String,String) -> String): Unit {
val result = fn(org,portal)
println(result)
}
fun main(args: Array){
val fn:(String,String)->String={org,portal->"$org develop $portal"}
myFun("sssit.org","javatpoint.com",fn)
}
Выход:
sssit.org develop javatpoint.com
Вышеупомянутая функция более высокого порядка также может быть вызвана другими способами, как ниже упоминается код в функции main():
myFun("sssit.org","javatpoint.com",{org,portal->"$org develop $portal"})
