Operador ternario en Kotlin: 5 errores principales de principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Operador ternario en Kotlin: por qué no existe y cómo no pisar el rastrillo

\n\n

Si vienes a Kotlin desde Java, C# o JavaScript, seguramente al menos una vez te has sorprendido pensando: «¿Dónde está mi querido operador ternario condición ? valor1 : valor2?». Spoiler: en Kotlin no existe. Y esto no es un error, sino una característica. Los desarrolladores del lenguaje decidieron que el ternario clásico es una entidad innecesaria que solo complica la lectura del código, especialmente cuando hay más de dos condiciones anidadas.

\n\n

Pero la ausencia del operador ternario no es un problema. Kotlin ofrece alternativas mucho más flexibles y seguras. Sin embargo, los principiantes (e incluso desarrolladores experimentados) suelen cometer los mismos errores al intentar emular la construcción habitual. En este artículo, analizaremos los 5 errores principales al trabajar con expresiones condicionales en Kotlin y mostraremos cómo evitarlos. ¡Allá vamos!

\n\n

Error n.º 1: Intentar insertar el operador ternario «a lo bruto»

\n\n

El error más común es escribir código al estilo Java:

\n\n
// ❌ Error: esta sintaxis no existe en Kotlin\nval max = (a > b) ? a : b\n
\n\n

Kotlin simplemente no compilará este código. Obtendrá un error: Unresolved reference: ?. Muchos desarrolladores se quedan perplejos y comienzan a buscar bibliotecas o complementos que «agreguen» el operador ternario. ¡No haga esto!

\n\n

¿Cómo hacerlo correctamente?

\n\n

En Kotlin, if no es un operador, sino una expresión. Devuelve un valor. Por lo tanto, en lugar del ternario, use un if-else normal:

\n\n
// ✅ Forma correcta: if como expresión\nval max = if (a > b) a else b\n
\n\n

El código se lee incluso más fácil que el ternario clásico, especialmente si la condición es compleja. Recuerde: if en Kotlin siempre devuelve el último valor en cada rama.

\n\n

Error n.º 2: Olvidar el else al asignar

\n\n

Dado que if es una expresión, debe devolver un valor. Si escribe:

\n\n
// ❌ Error: no hay else, el compilador no sabe qué devolver\nval result = if (condition) "Yes"\n
\n\n

El compilador mostrará un error: All branches of 'if' expression are required to return a value. Es lógico: ¿qué debería tener result si la condición es falsa? ¿null? ¿Una cadena vacía? El compilador no adivina.

\n\n

¿Cómo hacerlo correctamente?

\n\n

Siempre agregue else:

\n\n
// ✅ Correcto: ambas ramas devuelven un valor\nval result = if (condition) "Yes" else "No"\n
\n\n

Excepción: si usa if como operador (sin asignación). Entonces else no es obligatorio:

\n\n
// if como operador — else no es necesario\nif (condition) {\n    println("Yes")\n}\n
\n\n

Error n.º 3: if-else anidados complejos en lugar de when

\n\n

Cuando tiene más de dos opciones, una cadena de if-else if-else se convierte en «espagueti». Mire este horror:

\n\n
// ❌ Mal: if-else anidados difíciles de leer\nval status = if (code == 200) "OK"\n            else if (code == 404) "Not Found"\n            else if (code == 500) "Server Error"\n            else "Unknown"\n
\n\n

Las líneas saltan, los ojos se pierden. Y si agrega un par de condiciones más, será una pesadilla.

\n\n

¿Cómo hacerlo correctamente?

\n\n

Use when — es un análogo de switch con esteroides:

\n\n
// ✅ Excelente: when se lee como una tabla\nval status = when (code) {\n    200 -> "OK"\n    404 -> "Not Found"\n    500 -> "Server Error"\n    else -> "Unknown"\n}\n
\n\n

when en Kotlin también es una expresión, por lo que puede devolver un valor. Y es mucho más claro que una cadena de if-else. Además, when admite condiciones complejas: rangos, tipos, expresiones arbitrarias.

\n\n
// when con rango\nval grade = when (score) {\n    i                

Blogs

Book Recommendations