La notación Yoda en PHP

Hoy toca hablar de la notación Yoda (o condiciones Yoda), muy querida por alguna gente y muy despreciada por otra gente.

Como sabéis que soy una persona muy neutral y sin opiniones muy marcadas os diré que ambos puntos de vista son muy respetables… por muy despreciable que sea esta aberrante forma de escribir una condición.

¿Qué son las condiciones Yoda?

Es fácil, consiste en darle la vuelta a las condiciones (sí, eso que va dentro de los if y similares) de igualdad para que no cometamos errores sin querer.

Para muestra un botón. En este código hay un error:

$altura = 2.10;

if ($altura=1.74) {
    echo "Tienes la altura ideal.\n";
}
else {
    echo "Tu altura no está mal, pero no es perfecta.\n";
}

Adivinanza: ¿Cuál es mi altura?

¿Dónde está el error? Como tu privilegiada mente ya habrá descubierto tras un sesudo análisis el problema está en la condición del if ¡nos hemos colado y hemos puesto solo un igual en lugar de dos!

Bueno, venga… ya pasó. Lo solucionamos rápido:

$altura = 2.10;

if ($altura==1.74) {
    echo "Tienes la altura ideal.\n";
}
else {
    echo "Tu altura no está mal, pero no es perfecta.\n";
}

Para evitar este tipo de errores tenemos la notación Yoda que consiste en darle la vuelta a la comparación:

$altura = 2.10;

if (1.74==$altura) {
    echo "Tienes la altura ideal.\n";
}
else {
    echo "Tu altura no está mal, pero no es perfecta.\n";
}

De esta forma, si nos equivocamos y ponemos, como en el ejemplo de arriba, solo un igual PHP se quejará y nos avisará del problema.

¿Y funciona con constantes?

¡Claro! ¿En serio tengo que probarlo? Venga, vale:

define("ALTURA_OPTIMA", 1.75);

$altura = 2.10;

if (ALTURA_OPTIMA=$altura) {
    echo "Tienes la altura ideal.\n";
}
else {
    echo "Tu altura no está mal, pero no es perfecta.\n";
}

Como imaginarás, esto va a dar también un error.

¿Y por qué no me gusta la notación Yoda?

Supongo que porque de pequeño no tuve los suficientes abrazos. Pero además de eso:

  • Con unos buenos tests este problema se localiza rápido.
  • El código es feo (sí, este es un gran argumento de peso).
  • Esta línea solo está para hacer bulto y parezca que tengo buenas razones.
  • Lo mismo que ésta.
  • Y ésta.

En realidad da igual. Puedes usar la que más te guste. No seré yo quien te lo impida. Allá lo que haga cada cual con su vida.

Me siento solo, dime algo...