Usuario:Bryan.Sirias/Yoda conditions

De Wikipedia, la enciclopedia libre

En la jerga de la programación, las condiciones de Yoda (también llamadas notación de Yoda) es un estilo de programación en el que las dos partes de una expresión se invierten del orden típico en una declaración condicional. Una condición de Yoda coloca la parte constante de la expresión en el lado izquierdo de la sentencia condicional. El nombre de este estilo de programación se deriva del personaje de La Guerra de las Galaxias llamado Yoda, quien habla inglés con una sintaxis poco común.

Las condiciones Yoda son parte de los estándares de codificación Symfony[1]​, y Wordpress[2]​.

Ejemplo[editar]

Normalmente una declaración condicional sería escrita como:

if ($value == 42) { /* ... */ }
// Se lee como: "Si $value es igual a 42..."

Las condiciones Yoda describen la misma expresión, pero invertida:

if (42 == $value) { /* ... */ }
// Se lee como: "Si 42 es igual a $value..."

La constante está escrita a la izquierda del operador de comparación, y la variable cuyo valor está siendo comprobado ante la constante está escrita a la derecha. Este orden es comparable al estilo no comun del inglés hablado por Yoda, el cual es aproximadamente objeto@–@subject@–verbo[3]​ (p. ej., “Cuándo los novecientos años tu alcances, no bien te veras."[4][5]​).

Ventaja[editar]

Colocando el valor constante en la expresión no cambia el comportamiento del programa (a no ser que los valores evalúen a falso—ver abajo). En lenguajes de programación que usan un solo símbolo equals (=) para asignación y no para comparación, una equivocación posible es asignar un valor inintencionalmente en vez de escribir una declaración condicional.

if (myNumber = 42) { /* ... */ }
// Esto asigna 42 a myNumber en vez de evaluar la condición deseada.

Utilizando Yoda condiciones:

if (42 = myNumber) { /* ... */ }
// Esto es un error de sintaxis y por tanto no compilará.

Como 42 es una constante y no puede ser cambiada, este error será captado por el compilador.

Boolean myBoolean = true;
if (myBoolean = null) { /* ... */ }
// Esto causa una excepción de NullPointerException en Java Runtime, pero es legal en la compilación.

También puede evitar algunos tipos de comportamiento nulo inseguro.

String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// Esto causa una excepción de NullPointer en Java.

Con condiciones Yoda:

String myString = null;
if ("foobar".equals(myString)) { /* ... */ }
// Esto es falso, como se esperaba.

Crítica[editar]

Los críticos de las condiciones Yoda ven la falta de legibilidad como una desventaja que supera los beneficios descritos anteriormente. Algunos lenguajes de programación como Java y Swift no permiten asignaciones de variables dentro de los condicionales, definiendo que las asignaciones no regresan un valor, en cuyo caso, este error es imposible de realizar.[6]​ Muchos compiladores muestran una advertencia para código como: if (myNumber = 42) (por ejemplo, la opción GCC -Wall advierte o sugiere paréntesis alrededor de la asignación usada como valor de verdad), lo cual alerta al programador del posible error. En lenguajes dinámicos como Javascript, linters como ESLint pueden advertir sobre una asignación dentro de un condicional.[7]

La ventaja de evitar el comportamiento nulo también puede considerarse una desventaja, ya que los errores de puntero nulo pueden ocultarse y solamente aparecer hasta mucho más tarde en el programa.

Otra desventaja aparece en C++ cuando se comparan tipos no básicos, ya que el "==" es un operador y puede no haber una función definida de operador sobrecargado adecuada. Ejemplo: una comparación de CComBSTR de Microsoft con un literal de cadena, escrito como if (L "Hello" == cbstrMessage), no se mapea a una función de sobrecarga.[8]

Referencias[editar]

  1. «Coding Standards (Contributing to Symfony)». Symfony.com. Consultado el 12 de noviembre de 2016. 
  2. «PHP Coding Standards - Make WordPress Core». make.wordpress.com. Consultado el 15 de agosto de 2019. 
  3. Pullum, Geoffrey K. (18 de mayo de 2005). «Yoda's Syntax the Tribune Analyzes; Supply More Details I Will!». Itre.cis.upenn.edu. Language Log. Consultado el 22 de diciembre de 2014. «One way to look at Yoda's syntax is that it shows signs of favoring OSV syntax (Object-Subject-Verb) as the basic order in the simple clause.» 
  4. «The StarWars.com 10: Best Yoda Quotes». starwars.com. Lucasfilm, Ltd. 26 de noviembre de 2013. Consultado el 22 de diciembre de 2014. «When nine hundred years old you reach, look as good you will not.» 
  5. «Quotes for Yoda (Character)». imdb.com. Amazon. Consultado el 22 de diciembre de 2014. «When nine hundred years old *you* reach, look as good *you* will not, hmm?» 
  6. «The Swift Programming Language (Swift 3.0.1): Basic Operators». Developer.apple.com. 27 de octubre de 2016. Consultado el 12 de noviembre de 2016. 
  7. «disallow assignment operators in conditional statements». eslint.org. Consultado el 17 de febrero de 2017. 
  8. «CComBSTR::operator». Msdn.microsoft.com. Consultado el 12 de noviembre de 2016. 

Enlaces externos[editar]

[[Categoría:WordPress]] [[Categoría:Star Wars]] [[Categoría:Programación]]