Café y Código

7. Null Safety: Adiós, NullPointerException

El problema que Kotlin resuelve

El NullPointerException es el error más común en programación. Kotlin lo elimina en tiempo de compilación con su sistema de tipos.

"Si algo puede ser null, el tipo te lo dice obligatoriamente."

Tipos nullable vs no-nullable

Por defecto, las variables en Kotlin no pueden ser null. Para permitir null, agrega ?:

nullable.kt
KOTLIN
1 val nombre: String = "Kotlin" // NO puede ser null
2 // nombre = null // ERROR de compilación
3
4 val nullable: String? = "Kotlin" // Puede ser null
5 nullable = null // OK
6
7 // Acceso directo a nullable = ERROR
8 // println(nullable.length) // ERROR
9
10 // Acceso seguro con ?.
11 println(nullable?.length) // null (sin crash)

Elvis Operator (?:)

Si un valor es null, usa un valor por defecto:

elvis.kt
KOTLIN
1 val nombre: String? = null
2
3 // Si es null, usa "Desconocido"
4 val nombreSeguro = nombre ?: "Desconocido"
5 println(nombreSeguro) // "Desconocido"
6
7 // Útil con longitudes
8 val texto: String? = null
9 val longitud = texto?.length ?: 0
10 println(longitud) // 0

Non-null assertion (!!)

Úsalo solo cuando estés seguro de que no es null. Lanza excepción si lo es:

non-null.kt
KOTLIN
1 val nombre: String? = "Kotlin"
2 val longitud = nombre!!.length // OK: 6
3
4 val vacio: String? = null
5 // val error = vacio!!.length // Lanza NullPointerException

let con nullable

Ejecuta un bloque solo si el valor no es null:

let.kt
KOTLIN
1 val email: String? = "ana@mail.com"
2
3 email?.let {
4 println("Enviando correo a: $it")
5 // "it" es el valor no-null dentro del bloque
6 }
7
8 val vacio: String? = null
9 vacio?.let {
10 println("Esto NO se imprime")
11 }

💻 Misión

Crea una variable nullable Int?. Usa ?.let para imprimir su valor si no es null, y usa ?: para asignar 0 si lo es.

👁️ Ver solución sugerida
main.kt
KOTLIN
1 fun main() {
2 val puntos: Int? = null
3 val puntosSeguro = puntos ?: 0
4 println("Puntos: $puntosSeguro")
5
6 puntos?.let {
7 println("Tienes $it puntos")
8 } ?: println("No hay puntos registrados")
9 }

Pon a prueba tu null safety

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.