0Pricing
Kotlin Academy · Lección

Tipos anulables y el modificador ?

Declare variables anulables y comprenda la seguridad frente a null de Kotlin en tiempo de compilación.

Tipos anulables y el modificador ? 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.

Seguridad frente a null en Kotlin

Kotlin distingue en tiempo de compilación entre los tipos que pueden contener null y los que no. El compilador evita la mayoría de las excepciones NullPointerException antes del tiempo de ejecución.

Tipo no anulable

De forma predeterminada, un tipo de Kotlin no puede ser null. Si intenta asignarle null, el compilador lo rechaza.

fun main() {
    val name: String = "Ada"
    // val nope: String = null // ERROR
    println(name)
}

Tipo anulable con ?

Añada ? para permitir null. El compilador trata ahora la variable como un valor que puede estar ausente.

fun main() {
    val name: String? = null
    println(name) // null
}

Llamar a métodos sobre valores anulables

No puede llamar directamente a un método sobre un valor anulable sin gestionar antes el caso null. El compilador lo rechaza.

fun main() {
    val name: String? = "Bob"
    // println(name.length) // ERROR — name might be null
    if (name != null) println(name.length) // smart cast
}

Smart casts

Después de una comprobación if (x != null), Kotlin aplica un smart cast a x para tratarlo como no anulable dentro de la rama.

fun main() {
    val name: String? = "Alice"
    if (name != null) {
        println("Length: ${name.length}") // safe, smart-cast
    } else {
        println("No name")
    }
}

Parámetro de función anulable

Marque como anulables los parámetros de función que podrían faltar. Quien llama a la función debe proporcionar explícitamente un valor o null.

fun greet(name: String?) {
    if (name == null) println("Hello, stranger")
    else println("Hello, $name")
}
fun main() {
    greet("Sara")
    greet(null)
}

Tipo de retorno anulable

Una función que devuelve X? indica a quien la llama que podría devolver null; deberá gestionarlo.

fun findUser(id: Int): String? {
    return if (id == 1) "Alice" else null
}
fun main() {
    val u = findUser(2)
    println(u ?: "no user")
}

Propiedades anulables

Las propiedades de una clase también pueden ser anulables. Es habitual cuando los campos se rellenan más adelante o se obtienen de forma opcional.

data class Profile(
    val name: String,
    val avatarUrl: String?
)
fun main() {
    val p = Profile("Lee", null)
    println(p.avatarUrl ?: "(no avatar)")
}

Comparación con Java

Los tipos de Java que pasan a Kotlin aparecen como platform types (String!); Kotlin confía en usted, pero no ofrece seguridad frente a null. Siempre que sea posible, anote las API de Java con @Nullable/@NotNull.

fun main() {
    val maybeList: List<Int>? = null
    val listOfMaybe: List<Int?> = listOf(1, null, 3)
    println(maybeList?.size)     // null
    println(listOfMaybe.size)    // 3
}

Comparación con Java

Los tipos de Java que pasan a Kotlin aparecen como tipos de plataforma (String!): Kotlin confía en usted, pero no ofrece seguridad frente a valores nulos. Siempre que sea posible, anote las API de Java con @Nullable/@NotNull.

fun main() {
    val maybeNull: String? = System.getenv("FOO") // null if unset
    println("env FOO = ${maybeNull ?: "(unset)"}")
}

Por qué es importante

La seguridad frente a null en tiempo de compilación evita toda una categoría de fallos en tiempo de ejecución. Adopte el modificador ?: documenta la intención y obliga a gestionar el caso.

fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
    val r1 = divide(10, 2) // 5
    val r2 = divide(10, 0) // null — handled at call site
    println("$r1, $r2")
}

Comprobación rápida

¿Qué significa el ? al final de una declaración de tipo?

Repaso

De forma predeterminada, los tipos de Kotlin no son anulables. Añada ? para permitir null. El compilador impone la gestión de null mediante smart casts, llamadas seguras y el operador Elvis, lo que evita la mayoría de las excepciones NullPointerException antes del tiempo de ejecución.

Preguntas frecuentes

¿La lección «Tipos anulables y el modificador ?» es gratis?

Sí — el texto completo de «Tipos anulables y el modificador ?» 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 «Tipos anulables y el modificador ?»?

Declare variables anulables y comprenda la seguridad frente a null de Kotlin en tiempo de compilación. 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 «Tipos anulables y el modificador ?»?

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