Uso del Operador Elvis en Kotlin para Nulables

Clase 21 de 38Curso de Kotlin desde Cero

Contenido del curso

Hola mundo Kotlin

Resumen

Cuando trabajas con tipos nullable en Kotlin, es común necesitar un plan B para evitar errores por valores nulos. El operador Elvis es precisamente esa herramienta que te permite asignar un valor por defecto cuando una expresión devuelve null, convirtiendo así un tipo nullable en uno no nullable de forma limpia y concisa.

¿Qué problema resuelve el operador Elvis en Kotlin?

En Kotlin, los tipos nullable permiten que una variable contenga null. Sin embargo, al querer asignar el resultado de una operación sobre un nullable a una variable de tipo no nullable, el compilador marca un error. Esto ocurre porque no puedes asignar un tipo nullable a uno que no lo es directamente.

Por ejemplo, si tienes una variable nombre de tipo String? (que puede ser nula) y quieres obtener la cantidad de caracteres con .length, el resultado será de tipo Int?. Intentar guardar ese valor en una variable Int sin manejar la nulidad provocará un error de compilación [01:10].

¿Cómo se utiliza el operador Elvis con la sintaxis ?:?

El operador Elvis se escribe con el símbolo ?: (signo de interrogación seguido de dos puntos). Se llama así porque visualmente el símbolo se asemeja al copete del cantante americano Elvis Presley [02:00].

La mecánica es sencilla:

  • Del lado izquierdo colocas la expresión que podría devolver null.
  • Del lado derecho colocas el valor por defecto que se asignará si la expresión es nula.

kotlin val nombre: String? = null val caractresDeNombre: Int = nombre?.length ?: 0 println(caractresDeNombre)

En este ejemplo, nombre?.length devuelve null porque nombre es nulo. Gracias al operador Elvis, en lugar de propagar ese null, se asigna 0 como valor por defecto [02:30].

¿Qué sucede al ejecutar el código?

Al correr el programa, la salida es 0. Esto confirma que:

  • La variable nombre es null.
  • Al intentar acceder a .length, el resultado es null.
  • El operador Elvis intercepta ese null y devuelve el valor 0 definido a la derecha.

De esta forma, la variable caractresDeNombre siempre tendrá un valor válido de tipo Int, nunca será nula.

¿Por qué es útil convertir de nullable a no nullable?

Esta conversión es fundamental en Kotlin por varias razones:

  • Seguridad en tiempo de compilación: evitas excepciones NullPointerException en tiempo de ejecución.
  • Código más predecible: cada variable tiene un valor garantizado.
  • Compatibilidad: puedes pasar el resultado a funciones que esperan tipos no nullable sin problemas.

El operador Elvis complementa otras herramientas de manejo de nulabilidad como los safe calls (?.) y el bloque try-catch. Mientras que los safe calls permiten acceder a propiedades de forma segura y try-catch captura excepciones, el operador Elvis se enfoca en proveer un valor alternativo de manera directa y expresiva.

Si ya manejas safe calls en tu código Kotlin, agregar el operador Elvis te permitirá escribir lógica más robusta con menos líneas. ¿Has encontrado algún caso donde prefieras usar try-catch en lugar del operador Elvis? Comparte tu experiencia.