Sobes.tech
Middle

¿Cuál es la diferencia entre las funciones de extensión let, run, also y apply en Kotlin?

sobes.tech AI

Respuesta de la IA

let: Invoca un cierre en un objeto y devuelve el resultado del cierre. Permite usar el objeto como argumento en una expresión lambda (it). Es útil para trabajar con objetos nullable.

// Ejemplo de uso de let
val nullableString: String? = "Hello"
val length = nullableString?.let {
    // it - es un String no nulo
    it.length
}

run: Ejecuta un bloque de código en un objeto y devuelve el resultado del bloque. Dentro del bloque, el objeto está disponible como this. Útil para inicializar objetos y llamar a métodos posteriormente.

// Ejemplo de uso de run
val result = buildString {
    // this - es un StringBuilder
    append("Start\n")
    append("Middle\n")
}.run {
    // this - es un String
    uppercase()
}

also: Invoca un cierre en un objeto y devuelve el mismo objeto. Permite realizar acciones adicionales (como registro o configuración) en el objeto sin modificarlo.

// Ejemplo de uso de also
val list = mutableListOf("a", "b", "c").also {
    // it - es un MutableList
    println("Lista creada: $it")
}

apply: Invoca un cierre en un objeto y devuelve el mismo objeto. Dentro del bloque, el objeto está disponible como this. Es útil para configurar propiedades del objeto.

// Ejemplo de uso de apply
val textView = TextView(context).apply {
    // this - es un TextView
    text = "¡Hola, mundo!"
    textSize = 16f
    setTextColor(Color.BLACK)
}

Diferencias principales:

Función Cómo se accede al objeto Qué devuelve Uso típico
let it Resultado de la lambda Objetos nullable, transformación
run this Resultado de la lambda Inicialización y llamadas a métodos
also it El mismo objeto Acciones adicionales (efectos secundarios)
apply this El mismo objeto Configuración de propiedades