0Pricing
Kotlin Academy · Lección

Smart casts

Conversión automática tras las comprobaciones

Smart casts es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 2 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.

Qué son los smart casts

Después de comprobar el tipo de un valor, Kotlin recuerda ese hecho. Dentro del bloque comprobado, trata el valor automáticamente como el tipo más específico.

Esta función se denomina smart cast y elimina la necesidad de realizar conversiones manuales.

Smart cast después de is

Una vez superada una comprobación is, puede usar el valor como ese tipo sin escribir una conversión.

El compilador la inserta por usted.

fun describe(x: Any) {
    if (x is String) {
        println(x.length) // x is smart-cast to String
    }
}

fun main() {
    describe("hello")
}

Smart cast después de comprobar null

Los smart casts también funcionan con la nulabilidad. Después de confirmar que un valor no es nulo, se trata como un valor no nulo.

fun length(text: String?): Int {
    if (text != null) {
        return text.length // smart-cast to non-null String
    }
    return 0
}

fun main() {
    println(length("abc"))
    println(length(null))
}

Smart casts en when

Las comprobaciones de tipos dentro de when también habilitan los smart casts en cada rama.

Esta es la forma idiomática de gestionar varios tipos posibles.

fun area(shape: Any): Double = when (shape) {
    is Int -> shape.toDouble()
    is String -> shape.length.toDouble()
    else -> 0.0
}

fun main() {
    println(area(5))
    println(area("hello"))
}

Smart cast con retorno anticipado

Si devuelve el control antes de tiempo cuando un valor es nulo, el compilador sabe que después no es nulo.

El resto de la función usa el valor de forma segura.

fun process(text: String?) {
    if (text == null) return
    println(text.uppercase()) // smart-cast here
}

fun main() {
    process("data")
    process(null)
}

Smart cast con retorno mediante Elvis

Combinar Elvis con return también activa un smart cast para el código restante.

fun process(text: String?) {
    val safe = text ?: return
    println(safe.length) // safe is non-null
}

fun main() {
    process("hi")
    process(null)
}

Condiciones combinadas

Los smart casts respetan la lógica de las condiciones combinadas mediante &&.

Después de la comprobación de tipos de la izquierda, el lado derecho ya ve el tipo más específico.

fun check(x: Any) {
    if (x is String && x.length > 3) {
        println("long string")
    } else {
        println("other")
    }
}

fun main() {
    check("hello")
    check(2)
}

Cuándo fallan los smart casts

Los smart casts necesitan la garantía de que el valor no cambiará entre la comprobación y el uso.

Un var mutable que pueda cambiar simultáneamente quizá no admita un smart cast. Prefiera val para obtener smart casts fiables.

fun main() {
    val text: String? = "stable"
    if (text != null) {
        println(text.length) // val smart-casts cleanly
    }
}

Un val local es lo más seguro

Copiar un valor en un val local hace que los smart casts sean fiables.

Este es un patrón habitual al trabajar con propiedades anulables.

class Box(val content: String?)

fun main() {
    val box = Box("item")
    val c = box.content
    if (c != null) {
        println(c.uppercase())
    }
}

Smart cast frente a conversión explícita

Los smart casts sustituyen la mayoría de las conversiones explícitas con as. Son más seguros porque solo se aplican cuando el tipo está demostrado.

A continuación, aprenderá sobre is y as explícitos.

fun main() {
    val x: Any = "text"
    if (x is String) {
        // no need for (x as String)
        println(x.reversed())
    }
}

Integración

Los smart casts permiten que el compilador reduzca los tipos automáticamente:

  • Después de las comprobaciones is → convierte al tipo correspondiente
  • Después de comprobar que no es nulo → convierte al tipo no nulo
  • Funcionan en if, when y después de retornos anticipados
  • Son más fiables con val
fun render(x: Any): String {
    if (x is Int) return "number " + x
    if (x is String) return "text " + x.uppercase()
    return "unknown"
}

fun main() {
    println(render(7))
    println(render("go"))
}

Comprobación rápida

Ponga a prueba su comprensión de los smart casts.

Repaso

Ha aprendido sobre los smart casts:

  • Las comprobaciones de tipos y de valores nulos reducen el tipo automáticamente
  • Funcionan en if, when y después de retornos anticipados
  • val proporciona los smart casts más fiables

A continuación, estudiará directamente los operadores is y as.

Preguntas frecuentes

¿La lección «Smart casts» es gratis?

Sí — el texto completo de «Smart casts» 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 «Smart casts»?

Conversión automática tras las comprobaciones 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 2 de 4.

¿Cuánto tiempo toma la lección «Smart casts»?

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. when como expresión
  2. Smart casts
  3. Operadores is y as
  4. when exhaustivo
← Volver a Kotlin Academy