Café y Código

11. Lambdas y Scope Functions

Lambdas: Funciones anónimas

Las lambdas son bloques de código que puedes pasar como variables:

lambdas.kt
KOTLIN
1 // Sintaxis: { parametros -> cuerpo }
2 val sumar = { a: Int, b: Int -> a + b }
3 println(sumar(3, 5)) // 8
4
5 // Si es un solo parámetro, usa "it"
6 val duplicar = { it: Int -> it * 2 }
7 println(duplicar(4)) // 8
8
9 // Pasar lambda a función
10 fun ejecutar(nombre: String, accion: () -> Unit) {
11 println("Inicio: $nombre")
12 accion()
13 println("Fin: $nombre")
14 }
15
16 ejecutar("Tarea") {
17 println(" Haciendo algo...")
18 }

Scope Functions: let, run, with, apply, also

Ejecutan un bloque en el contexto de un objeto. Cada una tiene un propósito:

scope-functions.kt
KOTLIN
1 data class Persona(var nombre: String, var edad: Int)
2
3 fun main() {
4 val persona = Persona("Ana", 25)
5
6 // let: acceso a "it", retorna resultado del bloque
7 val nombreLargo = persona.nombre.let {
8 println("Nombre: $it")
9 it.length // retorna esto
10 }
11 println("Longitud: $nombreLargo") // 3
12
13 // run: como let pero con "this" (sin "it")
14 val info = persona.run {
15 "$nombre tiene $edad años" // "this" es persona
16 }
17 println(info)
18
19 // with: igual a run pero con función
20 with(persona) {
21 println("$nombre tiene $edad años")
22 }
23
24 // apply: retorna el objeto, útil para configuración
25 val nuevaPersona = Persona("", 0).apply {
26 nombre = "Luis"
27 edad = 30
28 }
29 println(nuevaPersona) // Persona(nombre=Luis, edad=30)
30
31 // also: ejecuta acción sin cambiar el objeto (debug)
32 persona.also {
33 println("DEBUG: $it")
34 }
35 }

¿Cuándo usar cada una?

🧩 Guía rápida

  • let: transformar o filtrar un nullable con ?.let
  • run: ejecutar código con el objeto y obtener un resultado
  • with: acceder a múltiples propiedades sin repetir el nombre
  • apply: configurar un objeto (inicializar propiedades)
  • also: debug, logs o acciones secundarias

💻 Misión

Crea una data class `Config` con host y puerto. Usa apply para configurarla y run para crear un string de conexión.

👁️ Ver solución sugerida
main.kt
KOTLIN
1 data class Config(var host: String = "", var puerto: Int = 0)
2
3 fun main() {
4 val config = Config().apply {
5 host = "localhost"
6 puerto = 8080
7 }
8
9 val conexion = config.run {
10 "Conectando a $host:$puerto"
11 }
12 println(conexion)
13 }

Pon a prueba tus lambdas

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.