Kotlin Academy · Lección

let, also y run con receptores anulables

Use funciones de alcance para ejecutar código solo cuando un valor no sea null.

Lección 3 de 413 pasos

let, also y run con receptores anulables es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 3 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.

Las funciones de ámbito se combinan con los valores anulables

Las funciones de ámbito let, also y run se combinan muy bien con la llamada segura ?. para ejecutar un bloque solo cuando el receptor no es null.

let con llamada segura

obj?.let { ... } ejecuta el bloque solo si obj no es null; dentro del bloque, it hace referencia al valor no anulable.

fun main() {
    val name: String? = "Kotlin"
    name?.let {
        println("Length: ${it.length}")
        println("Upper: ${it.uppercase()}")
    }
}

let omite el bloque si el valor es null

Si el receptor es null, se omite todo el bloque de let.

fun main() {
    val name: String? = null
    val result = name?.let {
        println("never printed")
        it.length
    }
    println(result) // null
}

let devuelve un valor

let devuelve la última expresión de su bloque, por lo que puede encadenarse con Elvis para proporcionar valores predeterminados.

fun main() {
    val raw: String? = "  hello "
    val cleaned = raw?.let { it.trim().uppercase() } ?: "(empty)"
    println(cleaned) // HELLO
}

also para efectos secundarios

also ejecuta un bloque para sus efectos secundarios y devuelve el receptor original; resulta ideal para registrar información en un pipeline.

fun main() {
    val name: String? = "Alice"
    val len = name?.also { println("Processing: $it") }?.length
    println("len = $len")
}

also conserva el valor

A diferencia de let, also devuelve el receptor sin cambios. Úselo cuando quiera inspeccionarlo sin transformarlo.

fun main() {
    val items: List<Int>? = listOf(1, 2, 3)
    items?.also { println("Got list of size ${it.size}") }
           ?.forEach { println(it) }
}

run con llamada segura

obj?.run { ... } ejecuta el bloque con this asociado al receptor. Úselo cuando quiera acceder a miembros sin el prefijo it..

fun main() {
    val name: String? = "Kotlin"
    val info = name?.run {
        "len=$length upper=${uppercase()}"
    }
    println(info)
}

let frente a run

let utiliza it (el argumento de la lambda); run utiliza this (el receptor). Elija la opción que se lea mejor.

class User(val name: String, val age: Int)
fun main() {
    val user: User? = User("Ada", 35)
    user?.let { "${it.name} age ${it.age}" }.also(::println)
    user?.run { "$name age $age" }.also(::println)
}

Encadenar varios ámbitos

Encadene funciones de ámbito a lo largo de un pipeline para transformar y registrar información paso a paso.

fun main() {
    val raw: String? = "  hello  "
    val result = raw
        ?.also { println("raw: '$it'") }
        ?.let { it.trim() }
        ?.also { println("trimmed: '$it'") }
        ?.uppercase()
    println(result) // HELLO
}

let con takeIf

Combine takeIf (filtro) con let para ejecutar código según un predicado.

fun main() {
    val name: String? = "Kotlin"
    name?.takeIf { it.length > 3 }
        ?.let { println("Long name: $it") }
}

Antipatrón: if anidados

Antes de las funciones de ámbito:

fun main() {
    val name: String? = "Alice"
    // OLD WAY:
    if (name != null) {
        val upper = name.uppercase()
        println(upper)
    }
    // NEW WAY:
    name?.let { println(it.uppercase()) }
}

Comprobación rápida

¿Qué función de ámbito devuelve el receptor sin cambios y se utiliza principalmente para efectos secundarios?

Repaso

Combine ?. con let (el bloque devuelve un valor y utiliza it), run (el bloque devuelve un valor y utiliza this) o also (devuelve el receptor y se usa para efectos secundarios). Todas omiten la ejecución si el receptor es null.

Gratis para empezar

Aprende Kotlin con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «let, also y run con receptores anulables» es gratis?

Sí — el texto completo de «let, also y run con receptores anulables» 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 «let, also y run con receptores anulables»?

Use funciones de alcance para ejecutar código solo cuando un valor no sea null. 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 3 de 4.

¿Cuánto tiempo toma la lección «let, also y run con receptores anulables»?

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

  1. Tipos anulables y el modificador ?
  2. Safe Call ?. y Elvis ?: en código real
  3. let, also y run con receptores anulables
  4. Operador !!: cuándo y por qué evitarlo
← Volver a Kotlin Academy