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
- Tipos anulables y el modificador ?
- Safe Call ?. y Elvis ?: en código real
- let, also y run con receptores anulables
- Operador !!: cuándo y por qué evitarlo