Лямбда-выражение и функция высшего порядка в Kotlin

Лямбда — это функция, у которой нет имени. Лямбда-выражение (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"}) 

Оцените статью