Contenido del curso

Nulabilidad y llamados seguros en Kotlin

Resumen

Trabajar con datos que pueden o no existir es parte del día a día de cualquier desarrollador. La nulabilidad en Kotlin te permite declarar variables opcionales de forma segura, sin que tu programa se rompa cuando un valor no existe. Aquí entenderás cómo usar el safe call y el operador Elvis para manejar valores nulos sin excepciones inesperadas.

¿Qué es la nulabilidad y por qué importa en Kotlin?

La nulabilidad describe valores que pueden o no existir en un momento dado. Piensa en una plataforma de correo: cuando ingresas tu email por primera vez, el sistema valida si existes para mandarte a login o a registro. Ese flujo cambia totalmente según si el dato existe o no.

En Kotlin, una variable normal de tipo String no admite valores nulos. Si intentas asignarle null, el compilador te lanza el error Null cannot be a value of a non-null type String. Para permitir nulos, debes declararla con el signo de interrogación: String? [00:50].

kotlin val emailObligatorio: String = "user@email.com" val emailOpcional: String? = null

¿Qué diferencia hay entre String y String? en Kotlin? String no acepta null y te lo bloquea en compilación. String? sí lo acepta y te obliga a manejar el caso nulo con llamados seguros.

¿Cómo acceder de forma segura a variables nulables?

Cuando intentas acceder a una propiedad de una variable opcional, Kotlin no te deja hacerlo directamente. Te muestra el mensaje Only safe or non-null asserted calls are allowed on nullable receivers [03:20].

Para resolverlo tienes dos caminos principales:

  • Safe call (?.): accede a la propiedad solo si la variable no es nula. Si lo es, devuelve null sin romper el programa.
  • Operador de aserción (!!): fuerza el acceso al valor. Si la variable es nula, lanza una NullPointerException y termina la ejecución.

kotlin val longitudEmail = emailOpcional?.length println("Longitud del correo: $longitudEmail")

El safe call con el signo de interrogación te protege. El operador de aserción con doble exclamación es riesgoso porque puede cancelar tu flujo si el valor no existe.

¿Cuándo usar el operador de aserción !! en Kotlin?

Úsalo solo cuando estés totalmente seguro de que la variable contiene un valor. En la práctica, es preferible evitarlo porque cualquier descuido genera una excepción. Como se muestra en clase, intentar imprimir emailOpcional!! cuando el valor es null rompe la ejecución [02:10].

¿Cómo usar el operador Elvis para valores por defecto?

Mostrar null en pantalla no es amigable para el usuario. Nadie entiende qué significa ver “null” en un formulario. Aquí entra el operador Elvis (?:), llamado así porque de lado se parece al peinado del cantante.

Lo que hace es simple: si el valor de la izquierda es null, devuelve el valor de la derecha como respaldo.

kotlin val longitudEmail = emailOpcional?.length ?: 0

En este caso, si emailOpcional es nulo, la longitud será 0 en lugar de null. Esto comunica mejor al usuario y evita imprimir valores poco entendibles.

¿Para qué sirve el operador Elvis en Kotlin? Define un valor por defecto cuando una variable nulable resulta ser null. Se escribe con ?: y reemplaza el null por lo que tú decidas: un cero, una cadena vacía o un texto como “anónimo”.

¿Cómo aplicar safe call y Elvis en un ejercicio práctico?

El reto propuesto en clase combina ambos operadores [05:40]. Debes crear una variable email obligatoria y otra nombre opcional. Luego usar el operador Elvis para mostrar “anónimo” si el nombre es nulo, y el safe call para obtener la longitud de forma segura.

kotlin val email: String = "user@email.com" val nombre: String? = null

val nombreFinal = nombre ?: "anónimo" val longitud = nombre?.length ?: 0

println("Email: $email, Usuario: $nombreFinal, Longitud: $longitud")

Al ejecutar el código, el resultado evita el null. El usuario se muestra como “anónimo” y la longitud como 0, lo que mantiene la salida clara y profesional.

¿Qué conceptos clave deberías recordar de la nulabilidad?

  • Tipo nulable: se declara agregando ? después del tipo, como String?.
  • Safe call (?.): accede a propiedades sin lanzar excepción si el valor es nulo.
  • Operador Elvis (?:): asigna un valor por defecto cuando la variable es nula.
  • Operador de aserción (!!): fuerza el acceso y puede generar NullPointerException.
  • NullPointerException: excepción que detiene la ejecución cuando accedes a un valor nulo sin protección.

Manejar la nulabilidad de forma adecuada es lo que separa un programa que se rompe ante el primer dato vacío de uno que responde con elegancia. ¿Qué valor por defecto usarías tú con el operador Elvis en tus formularios? Cuéntame en los comentarios.