Expresiones Lambda en Kotlin¶
Las expresiones lambda son funciones anónimas (sin nombre) que se pueden pasar como valores.
Son utilizadas principalmente en funciones de orden superior, es decir, funciones que reciben otras funciones como parámetros.
En Kotlin, las lambdas se utilizan constantemente: en listas, en Compose, en callbacks, en eventos y en programación funcional.
¿Qué es una expresión lambda?¶
Una lambda es una función anónima con esta sintaxis:
{ parámetros -> cuerpo }
Ejemplo básico:
val saludo = { nombre: String -> "Hola, $nombre" }
println(saludo("Ginés"))
Función de orden superior: ejemplo base¶
Vamos a crear una función de orden superior llamada operar, que reciba:
- dos enteros
- una función
(Int, Int) -> Int
fun operar(a: Int, b: Int, funcion: (Int, Int) -> Int): Int {
return funcion(a, b)
}
Enviar lambdas como argumento¶
fun main() {
val suma = operar(10, 5) { x, y -> x + y }
val resta = operar(10, 5) { x, y -> x - y }
val potencia = operar(2, 4) { x, y -> x.toDouble().pow(y).toInt() }
println("Suma: $suma")
println("Resta: $resta")
println("Potencia: $potencia")
}
Tipos de parámetro: con o sin tipo¶
Kotlin puede inferir tipos, así que esto es válido:
operar(3, 4) { x, y -> x * y }
Y también:
operar(3, 4) { x: Int, y: Int -> x * y }
Renombrar parámetros¶
operar(5, 2) { primero, segundo -> primero - segundo }
Trailing lambda (lambda al final)¶
val resultado = operar(6, 3) { x, y -> x / y }
Lambdas de un solo parámetro → uso de it¶
val alCuadrado: (Int) -> Int = { it * it }
println(alCuadrado(5)) // 25
9.8 Acceso a variables externas¶
var contador = 0
val incrementar = {
contador++
}
incrementar()
incrementar()
println(contador) // 2
Ejemplo completo integrando todo¶
fun operar(a: Int, b: Int, op: (Int, Int) -> Int): Int = op(a, b)
fun main() {
var factor = 3
val multiplicar = operar(4, 5) { x, y -> (x * y) * factor }
println(multiplicar) // (4 * 5) * 3 = 60
}
Actividades¶
-
AC 502 (RA2 / CE2a / IC1 / 1p). Crea una función de orden superior
calcular(a, b, operacion)y llámala desdemainusando lambdas para:- sumar
- restar
- multiplicar
-
AC 503 (RA2 / CE2a / IC1 / 1p). Crea una lista de enteros y usa una lambda con
filterpara obtener solo los números pares. Imprime el resultado. -
AC 504 (RA2 / CE2a / IC1 / 1p). Declara una lambda que reciba un
Stringy devuelva cuántas vocales contiene. Llama a la lambda desdemain.