El lenguaje Kotlin tiene un excelente soporte para la programación funcional. Las funciones de Kotlin pueden almacenarse en variables y estructuras de datos, pasarse como argumentos y devolverse desde otras funciones de orden superior.
Función de orden superior –
En Kotlin, una función que puede aceptar una función como parámetro o puede devolver una función se llama función de orden superior . En lugar de Integer, String o Array como parámetro para funcionar, pasaremos una función anónima o lambdas. Con frecuencia, las lambdas se pasan como parámetro en las funciones de Kotlin por conveniencia.
Pasar la expresión lambda como parámetro a la función de orden superior:
Podemos pasar una expresión lambda como parámetro a la función de orden superior.
Hay dos tipos de expresiones lambda que se pueden pasar:
- Expresión lambda que devuelve Unidad
- Expresión lambda que devuelve cualquiera de los valores enteros, strings, etc.
Programa Kotlin de expresión lambda que devuelve Unit-
Kotlin
// lambda expression var lambda = {println("GeeksforGeeks: A Computer Science portal for Geeks") } // higher-order function fun higherfunc( lmbd: () -> Unit ) { // accepting lambda as parameter lmbd() //invokes lambda expression } fun main(args: Array<String>) { //invoke higher-order function higherfunc(lambda) // passing lambda as parameter }
Producción:
GeeksforGeeks: A Computer Science portal for Geeks
Explicación:
comprendamos el programa anterior paso a paso:
en la parte superior, definimos una expresión lambda que contiene print() para imprimir una string en la salida estándar.
var lambda = {println("GeeksforGeeks: A Computer Science portal for Geeks") }
luego, definimos una función de orden superior que contiene un parámetro.
lmbd: () -> Unit
lmbd es el nombre local del parámetro lambda de recepción.
() representa que la función no acepta ningún argumento.
La unidad representa que la función no devuelve ningún valor.
En la función principal, hemos invocado la función de orden superior pasando la expresión lambda como parámetro.
higherfunc(lambda)
Programa Kotlin de expresión lambda que devuelve un valor entero –
Kotlin
// lambda expression var lambda = {a: Int , b: Int -> a + b } // higher order function fun higherfunc( lmbd: (Int, Int) -> Int) { // accepting lambda as parameter var result = lmbd(2,4) // invokes the lambda expression by passing parameters println("The sum of two numbers is: $result") } fun main(args: Array<String>) { higherfunc(lambda) //passing lambda as parameter }
Producción:
The sum of two numbers is: 6
Explicación:
comprendamos el programa anterior paso a paso:
en la parte superior, definimos una expresión lambda definida que devuelve un valor entero.
var lambda = {a: Int , b: Int -> a + b }
Luego, hemos definido una función de orden superior que acepta la expresión lambda como parámetro.
lmbd: (Int, Int) -> Int
lmbd es el nombre local del parámetro lambda de recepción.
(Int,Int) representa que la función acepta dos parámetros de tipo entero.
-> Int representa que la función devuelve un valor entero.
En la función principal, hemos invocado la función de orden superior pasando la lambda como parámetro.
higherfunc(lambda)
Pasando la función como un parámetro a la función de orden superior –
Podemos pasar una función como parámetro en la función de orden superior.
Hay dos tipos de funciones que se pueden pasar:
- función que devuelve Unidad
- función que devuelve cualquiera de los valores enteros, strings, etc.
Programa Kotlin de función de paso que devuelve Unit-
Kotlin
// regular function definition fun printMe(s:String): Unit{ println(s) } // higher-order function definition fun higherfunc( str : String, myfunc: (String) -> Unit){ // invoke regular function using local name myfunc(str) } fun main(args: Array<String>) { // invoke higher-order function higherfunc("GeeksforGeeks: A Computer Science portal for Geeks",::printMe) }
Producción:
GeeksforGeeks: A Computer Science portal for Geeks
Explicación:
En la parte superior, definimos una función normal printMe() que acepta un parámetro de tipo String y devuelve Unidad.
fun printMe(s:String): Unit
(s: String) es el único parámetro
La unidad representa el tipo de retorno
Luego, definimos la función de orden superior como
fun higherfunc( str : String, myfunc: (String) -> Unit)
recibe dos parámetros, uno es de tipo String y otro es de función
str: String representa el parámetro de string
myfunc: (String) -> Unit representa que acepta la función como un parámetro que devuelve Unit.
Desde la función principal, se invoca la función superior pasando la string y la función como argumentos.
higherfunc("GeeksforGeeks: A Computer Science portal for Geeks",::printMe)
Programa Kotlin de función de paso que devuelve un valor entero-
Kotlin
// regular function definition fun add(a: Int, b: Int): Int{ var sum = a + b return sum } // higher-order function definition fun higherfunc(addfunc:(Int,Int)-> Int){ // invoke regular function using local name var result = addfunc(3,6) print("The sum of two numbers is: $result") } fun main(args: Array<String>) { // invoke higher-order function higherfunc(::add) }
Producción:
The sum of two numbers is: 9
Explicación:
En la parte superior, definimos la función regular como
fun add(a: Int, b: Int): Int{ var sum = a + b return sum }
acepta dos parámetros de tipo Integer y devuelve la suma de ambos enteros
Luego, definimos la función de orden superior como
fun higherfunc(addfunc:(Int,Int)-> Int)
acepta una función que contiene dos parámetros y
llama a la función normal addfunc(3,6) pasando los parámetros.
Desde la función principal, invocamos la función de orden superior pasando la función regular como parámetro
higherfunc(::add)
Devolver una función desde una función de orden superior
Podemos devolver una función de una función de orden superior. Al devolver la función, tenemos que especificar los tipos de parámetros y el tipo de retorno de la función regular en el tipo de retorno de la función de orden superior.
Programa Kotlin de una función que devuelve otra función.
Kotlin
// function declaration fun mul(a: Int, b: Int): Int{ return a*b } //higher-order function declaration fun higherfunc() : ((Int,Int)-> Int){ return ::mul } fun main(args: Array<String>) { // invoke function and store the returned function into a variable val multiply = higherfunc() // invokes the mul() function by passing arguments val result = multiply(2,4) println("The multiplication of two numbers is: $result") }
Producción:
The multiplication of two numbers is: 8
Explicación:
En la parte superior del programa definimos la función mul() que acepta dos parámetros y su tipo de devolución también es un número entero.
fun mul(a: Int, b: Int): Int
Luego, definimos que la función de orden superior que tiene un tipo de retorno es una función.
fun higherfunc5() : ((Int,Int)-> Int){ return ::mul }
::mul representa que devuelve la función mul()
(Int,Int) representa que mul acepta dos parámetros de tipo entero
Int representa que mul devuelve un valor entero.
En la función principal, hemos llamado a la función superior que devuelve otra función y la almacena en una variable multiplicada.
val multiply = higherfunc()
luego invocamos la función mul() usando la variable local multiplicar(2,4) pasando dos argumentos.
Publicación traducida automáticamente
Artículo escrito por shad0w1947 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA