¡Un breve post está dedicado a todos los fanáticos de Star Wars y Java / JavaRush en honor al 40 aniversario del lanzamiento del Episodio V de la saga estelar!
A veces puedes encontrar muchas cosas interesantes en Internet, y el otro día me encontré con una práctica de programación bastante divertida a primera vista llamada Condiciones de Yoda . En resumen, las condiciones de Yoda (también notación Yoda) son un estilo de programación en el que las dos partes de la conocida expresión de comparación en declaraciones condicionales se invierten:
nueve seis partes de la saga, nos sentamos, sin dormir, a escribir un código para nuestro proyecto favorito y escribimos lo siguiente:

if (5 == a) {
// do something
}
Este estilo se puede utilizar en lenguajes con sintaxis similar a C, con mayor frecuencia en expresiones con if
y while
.
if (0 == variable) {
// do something
}
while (false == endingCondition) {
// do something
}
¿Por qué desplazar la expresión constante al lado izquierdo del operador de comparación? Supongamos una situación hipotética en la que, después de ver un maratón de las void checkNumber(int a)
{
if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
{
printf("Number is 13");
}
}
En este caso, cada vez que ejecutes el programa, recibirás la cadena Number is 13"
, independientemente del argumento pasado а
al método checkNumber(int a)
. ¡Esto no es lo que esperábamos! Los errores lógicos pueden ocurrir con bastante frecuencia entre los programadores novatos (créanme, lo sé). Pero en la etapa de compilación, un código como 13 = a generará un error, que ciertamente no pasaremos por alto, ya que el valor entero es una constante y, en consecuencia, no puede cambiar (convertirse en "a"). 
Existen ventajas y desventajas al utilizar las condiciones de Yoda.
Lado luminoso:
-
Evitar la asignación a una variable cuando nuestro objetivo es la comparación.
-
Resolviendo el problema del "comportamiento nulo" inseguro (
NullPointerException
) // ejemplos de Wikipedia
Sin Yoda:
String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java
Con Yoda:
String myString = null;
if ( "foobar".equals(myString) ) { // Результат - Ложь
/* не выполняется */
}
Lado oscuro:
- La legibilidad del código para las personas que verán su código se vuelve más compleja, lo que aumenta la carga sobre la percepción del código.
- Alcance limitado, solo se utiliza comparación de igualdad o comparación con una constante, verificando si hay nulo.
- Muchos compiladores ya “ven” errores de este tipo y advierten de antemano sobre la presencia de un error potencial.
GO TO FULL VERSION