Putting it together

by Luismi Cavallé

Admito que soy uno de esos programadores que a veces confunde claridad con brevedad. Admito que mi idea de código bonito, en ocasiones, lleva hasta el extremo el objetivo de reducir el número de líneas de código, incluso en perjuicio de la claridad. Y admito que esto no es bueno (ni bonito).

El operador ternario es ese azucar sintáctico creado por Kernighan y Ritchie, también llamado if en linea, y que permite abreviar expresiones como esta:

int a;
if (condicion)
{
  a = valor1;
}
else
{
  a = valor2;
}  

En una sola línea:

int a = condicion ? valor1 : valor2;

Su uso en casos sencillos como el del ejemplo es absolutamente recomendable. El problema viene cuando lo usas siempre que puedes, con expresiones complejas e incluso anidando unos if en línea dentro de otros. (Mmm… sí, eso lo he hecho yo)

El primer paso para superar una adicción es admitirla. Con lo que, por si no ha quedado claro: “Hola, me llamo Luismi y soy adicto al operador ternario”

Lo siguiente que haré es tratar de seguir las recomendaciones de Jamis Buck (un tipo que desarrolla el core de Ruby on Rails y que hace una labor de divulgación extraordinaria tanto en su blog como en The Rails Way) que en un reciente post propone una serie de recomendaciones para un uso comedido del operador ternario. Básicamente identifica 3 malos olores:

  1. Si necesitas utilizar varias líneas para hacer legible tu expresión, seguramente estás abusando del operador
  2. Si necesitas anidar varios if en línea, seguramente estás abusando del operador
  3. Si necesitas utilizar paréntesis en alguno de los miembros de la expresión, seguramente estás abusando del operador

Lo cual, dicho en Ruby:

(varias_lineas? or anidamiento? or parentesis?) ?
   :estas_abusando_del_operador_ternario :
   :uso_correcto_del_operador_ternario