¿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 |