Junior
¿Qué funciones de ámbito en Kotlin conoces?
sobes.tech AI
Respuesta de la IA
let: Ejecuta un bloque de código en un objeto y devuelve el resultado de la última expresión. Se usa a menudo para llamadas seguras a métodos en objetos nulos.run: Tiene dos variantes:- Como función de extensión: Ejecuta un bloque de código en el objeto (
this) y devuelve el resultado de la última expresión. - Como función independiente: Ejecuta un bloque de código sin receptor y devuelve el resultado de la última expresión.
- Como función de extensión: Ejecuta un bloque de código en el objeto (
with: Ejecuta un bloque de código en un objeto receptor proporcionado como argumento y devuelve el resultado de la última expresión.apply: Ejecuta un bloque de código en un objeto (this) y devuelve el propio objeto. Se usa a menudo para configurar propiedades del objeto.also: Ejecuta un bloque de código en un objeto (it) y devuelve el propio objeto. Se usa para realizar acciones secundarias en el objeto.
// Ejemplo de uso de let
val name: String? = "Kotlin"
val length = name?.let {
// this == null
// it == "Kotlin"
it.length // Devuelve la longitud de la cadena
} // length == 6
// Ejemplo de uso de run como extensión
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
listOf(first(), last())
// this == numbers
} // firstAndLast == [1, 3]
// Ejemplo de uso de run como función independiente
val result = run {
// Sin receptor
println("Ejecutando un bloque")
1 + 2 // Devuelve 3
} // result == 3
// Ejemplo de uso de with
val configuration = configureUsing {
// this - objeto pasado a configureUsing
width = 100
height = 200
}
fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
val example = ScopeExample()
example.builder()
return example
}
class ScopeExample {
var width: Int = 0
var height: Int = 0
}
// Ejemplo de uso de apply
val person = mutableListOf<String>().apply {
// this == lista
add("Alice")
add("Bob")
} // person == ["Alice", "Bob"]
// Ejemplo de uso de also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
// it == lista
println("Procesando lista: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]