Notación Yoda en programación: explicación

Introducción

Hay un término en programación que se llama notación Yoda o lenguaje Yoda. Es una forma distinta de programar las condiciones if en nuestros programas.

Criticada por muchos, querida por otros. No vamos a criticar nada porque no es el punto, el punto es explicar qué es y cómo usar esta notación.

Creo que proviene de cómo habla Yoda en las películas esas. Como que habla al revés. Por ejemplo, dice:

En esta guerra, un paso delante de nosotros, Dooku siempre parece estar

Cosa que podría cambiarse por:

Dooku siempre parece estar un paso delante de nosotros en esta guerra.

Notación Yoda

Recordemos lo que es un if

En cualquier lenguaje, una sentencia if tiene la siguiente forma:

if (condicion){
  // Haz algo
}

La condición puede ser algo como “valor es igual a 20” así:

if(valor == 20){
  //Es 20
}

Operadores

Esa forma de los IF trae algunas “desventajas” sobre todo para los programadores nuevos o novatos, en los que me incluyo. A veces olvidamos las diferencias entre:

  1. =
  2. ==
  3. ===

El primero es el operador de asignación. Por ejemplo:

variable = 1;

El segundo es el de equidad. Por ejemplo:

if(valor == 20){
  //Es 20
}

El tercero es el de identidad, y sólo es usado (que yo sepa) en JavaScript y PHP por eso del tipado débil.

Por ejemplo:

if(valor === 20){
  //Es idéntico a 20
}

Errores con if

A veces hacemos una comparación así:

if(valor = 20){
  //Es 20
}

En donde estamos haciendo algo mal, ya que sólo usamos un signo de igual, es decir, estamos asignando a valor el número 20. Eso siempre devolverá algo que no es falso, por lo que la condición siempre será verdadera.

¿No me crees? veamos esto en JavaScript:

Error en if
Error en if

Como vemos, la condición se cumplió debido a que hicimos una asignación, aunque el valor no es 20 en el momento del if. La cosa correcta sería así:

If correcto
If correcto

Recomiendo leer: let en JavaScript

Pues este error de comparación puede llevarnos horas depurando, ya que la mayoría de veces no es un error de sintaxis ni nada de eso.

Yoda al rescate

Es simplemente invertir cómo comparamos. Por ejemplo…

if(20 == valor){
  console.log("El valor es 20 :)")
}

Ahí ponemos primero al valor y luego la variable. La ventaja de esto es que si olvidamos poner el doble signo, y sólo ponemos uno, pasará esto:

Error de asignación en JavaScript que puede ser resuelto con Notación Yoda
Error de asignación en JavaScript que puede ser resuelto con Notación Yoda

Claro, eso pasa en JavaScript pero cualquier otro lenguaje también se quejaría de ello.

¿Por qué? bueno, porque estamos intentando asignar a 20 el valor de valor. Así de simple. Y no podemos sobrescribir el valor de 20, ya que 20 es una constante.

De esta forma, si olvidamos poner los dos signos o tres signos, el compilador o intérprete nos avisará. Por ejemplo tengo este programa en C:

#include <stdio.h>

int main(int argc, char const *argv[])
{
	int valor = 19;
	if (20 = valor)
	{
		printf("El valor es 20 :)\n");
	}
	return 0;
}

Al compilar marca este error:

Error de compilación con GCC
Error de compilación con GCC

Desventajas

Bueno, una de ellas es que al leer el código se lee al revés.

En lugar de decir: “if el valor es igual a 20” se dice: “if 20 es igual al valor”, cosa que puede confundir al lector del código.

Por otro lado, la mayoría de IDE’s y compiladores nos avisarán si estamos intentando asignar en lugar de comparar.

Conclusión

Úsalo si gustas, no le pasa nada a nadie y aunque su lectura es más difícil nadie morirá leyéndolo. Por otro lado puedes usarlo si te consideras novato.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *