Operador ternario en Go: cómo reemplazar C y no volverse loco

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

Introducción: ¿el operador ternario es amigo o enemigo?

\n\n

Si vienes a Go desde el mundo de C, C++, Java o JavaScript, seguramente estás acostumbrado a la construcción concisa:

\n\n
int max = (a > b) ? a : b;
\n\n

Este es el operador ternario. Es compacto, elegante y permite escribir una ramificación simple en una sola línea. Pero cuando empiezas a escribir en Go, te espera una sorpresa: Go no tiene operador ternario. En absoluto. Nada de ? :.

\n\n

¿Por qué los creadores del lenguaje tomaron esta decisión? ¿Cómo escribir ahora asignaciones condicionales cortas? Y lo más importante: ¿cómo hacerlo de manera idiomática, es decir, en el estilo aceptado por la comunidad Go?

\n\n

En este artículo analizaremos:

\n
    \n
  • Por qué Go no tiene operador ternario (spoiler: es una decisión consciente).
  • \n
  • Cómo reemplazar el ternario con if-else.
  • \n
  • Técnicas avanzadas: funciones, map, inlining.
  • \n
  • Cuándo se puede (y se debe) romper la regla.
  • \n
\n\n

¡Allá vamos!

\n\n

¿Por qué Go renunció al operador ternario?

\n\n

La respuesta es simple y está en la filosofía del lenguaje: la legibilidad es más importante que la brevedad.

\n\n

Robert Griesemer (uno de los creadores de Go) dijo una vez: «El operador ternario es una fuente de errores. Es demasiado fácil de leer incorrectamente, especialmente cuando está anidado». Y es cierto. Recuerda al menos el famoso ejemplo en C:

\n\n
int x = (a ? b : c) ? d : e;
\n\n

¿Puedes entender de inmediato qué hace? Pues los creadores de Go decidieron que es mejor sacrificar una línea, pero hacer que el código sea obvio.

\n\n

En Go, la prioridad es la claridad de las intenciones. Si escribes una condición, que sea explícita. El operador ternario a menudo se convierte en un «número mágico»: miras la línea y no entiendes la lógica de inmediato. En Go, esto no debería ocurrir.

\n\n

Reemplazo básico: if-else como modismo

\n\n

La forma más simple y correcta de reemplazar el ternario es usar un if-else normal. Sí, ocupa 3 líneas en lugar de 1, pero se lee sin esfuerzo.

\n\n

Ejemplo: encontrar el máximo de dos números.

\n\n

En C:

\n
int max = (a > b) ? a : b;
\n\n

En Go (idiomático):

\n
var max int\nif a > b {\n    max = a\n} else {\n    max = b\n}
\n\n

«¡Pero es más largo!» — dirás. Sí. Pero míralo desde otro ángulo: dentro de un mes abrirás el código y verás la lógica de inmediato. Sin paréntesis, sin ambigüedades. Simplemente «si a es mayor que b, entonces max = a, si no, max = b».

\n\n

Más aún, la comunidad Go considera este estilo como el único correcto para condiciones simples. No intentes «hacer trampa» y meter todo en una sola línea: se considerará de mal gusto.

\n\n

Técnicas avanzadas: cuando quieres brevedad

\n\n

A veces escribes código donde if-else ocupa 10 líneas, aunque en esencia es una asignación simple. En estos casos, puedes aplicar algunos patrones que mantienen la idiomaticidad, pero hacen el código más compacto.

\n\n

1. Función auxiliar

\n\n

Si a menudo necesitas elegir entre dos valores, extrae la lógica en una función. Esto es especialmente útil para operaciones de una sola línea.

\n\n
func ternary(cond bool, a, b string) string {\n    if cond {\n        return a\n    }\n    return b\n}\n\n// Uso:\ngreeting := ternary(isMorning, "Buenos días", "Buenas tardes")
\n\n

Importante: no llames a la función ternary — se considera de mal gusto, ya que intentas «colar» el ternario por la puerta trasera. Es mejor darle un nombre significativo, como ifElse o choose. Pero si escribes para ti mismo, ¿por qué no?

\n\n

2. Uso de map para selección

\n\n

Si la condición se reduce a elegir entre dos opciones, puedes usar un map con claves booleanas. Se ve inusual, pero a veces se lee incluso mejor.

\n\n
var result = map[bo                

Blogs

Book Recommendations