apply y with: configurar y devolver
Use apply y with para configurar objetos y comprender sus valores de retorno.
apply y with: configurar y devolver es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.
Resumen de las funciones de ámbito
Las funciones de ámbito de Kotlin (apply, also, let, run, with) permiten ejecutar un bloque en el contexto de un objeto. Cada una se diferencia por su receptor (this frente a it) y su valor de retorno.
Conceptos básicos de apply
apply { ... } ejecuta el bloque con this vinculado al receptor y devuelve el propio receptor. Es perfecto para configurar objetos.
class Person {
var name: String = ""
var age: Int = 0
}
fun main() {
val p = Person().apply {
name = "Ada"
age = 35
}
println("${p.name}, ${p.age}")
}Por qué es útil apply
Sin apply, necesitaría una variable temporal para configurar el objeto y devolverlo después. apply reduce todo esto a una sola expresión.
class Config {
var host: String = ""
var port: Int = 0
}
fun makeConfig(): Config {
// Without apply:
// val c = Config(); c.host = "x"; c.port = 8080; return c
return Config().apply {
host = "localhost"
port = 8080
}
}
fun main() {
val c = makeConfig()
println("${c.host}:${c.port}")
}apply en una cadena
apply devuelve el receptor, por lo que se encadena de forma natural con llamadas de métodos posteriores.
class Builder {
val parts = mutableListOf<String>()
}
fun main() {
val result = Builder().apply {
parts.add("hello")
parts.add("world")
}.parts.joinToString(" ")
println(result) // hello world
}Conceptos básicos de with
with(receiver) { ... } ejecuta el bloque con this = receptor y devuelve el resultado de la lambda (NO el receptor). Es útil cuando quiere obtener un valor derivado.
class Rect(val w: Int, val h: Int)
fun main() {
val area = with(Rect(3, 4)) {
w * h
}
println(area) // 12
}apply frente a with
apply devuelve el receptor, por lo que es perfecto para builders. with devuelve el resultado de la lambda, por lo que es perfecto para calcular un valor a partir de un receptor.
class Box(var width: Int = 0, var height: Int = 0)
fun main() {
val box = Box().apply { width = 10; height = 20 } // returns Box
val area = with(box) { width * height } // returns Int
println("$box area=$area")
}apply con listas
Configure una colección mutable en línea.
fun main() {
val list = mutableListOf<String>().apply {
add("a")
add("b")
add("c")
}
println(list)
}apply devuelve el mismo tipo
El tipo de retorno de apply siempre es el tipo del receptor. No es necesario un retorno explícito.
class Sb {
private val buf = StringBuilder()
fun append(s: String): Sb { buf.append(s); return this }
fun build(): String = buf.toString()
}
fun main() {
val s = Sb().apply {
append("Hello, ")
append("Kotlin!")
}.build()
println(s)
}with reutiliza varios miembros
Dentro de with, todos los miembros del receptor están en el ámbito; no necesita el prefijo obj..
class Person(val name: String, val age: Int)
fun main() {
val description = with(Person("Ada", 35)) {
"Name: $name, Age: $age, AgeNext: ${age + 1}"
}
println(description)
}apply anidado
Puede anidar apply dentro de otro apply para realizar una configuración jerárquica. Utilícelo con moderación.
class Address {
var city: String = ""
var zip: String = ""
}
class User {
var name: String = ""
var address: Address = Address()
}
fun main() {
val u = User().apply {
name = "Ada"
address.apply {
city = "Istanbul"
zip = "34000"
}
}
println("${u.name} in ${u.address.city}")
}Cuándo NO utilizar apply
Si no necesita devolver el receptor, prefiera una construcción directa con argumentos con nombre o let/run. No utilice apply simplemente por variar.
class Config(val host: String, val port: Int)
fun main() {
// Named arguments often beat builder + apply:
val cfg = Config(host = "localhost", port = 8080)
println("${cfg.host}:${cfg.port}")
}Comprobación rápida
¿Qué devuelve apply después de ejecutar su bloque?
Resumen
apply ejecuta un bloque con this = receptor y devuelve el receptor; es perfecto para configurar objetos. with ejecuta un bloque con this = receptor y devuelve el resultado de la lambda; es perfecto para obtener valores derivados. Use argumentos con nombre cuando la configuración sea sencilla.
Preguntas frecuentes
¿La lección «apply y with: configurar y devolver» es gratis?
Sí — el texto completo de «apply y with: configurar y devolver» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.
¿Qué aprenderé en «apply y with: configurar y devolver»?
Use apply y with para configurar objetos y comprender sus valores de retorno. Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Kotlin Academy?
No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «apply y with: configurar y devolver»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?
Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- apply y with: configurar y devolver
- let y run: transformar y delimitar el alcance
- also: efectos secundarios sin cambiar el receptor
- Elegir la función de alcance adecuada: guía de decisión