¿Por qué WordPress invierte las declaraciones condicionales?

5 ene 2013, 01:40:24
Vistas: 611
Votos: 7

En el código central de WordPress, a menudo ves esto:

if (1 == $someVar)

en lugar de esto:

if ($someVar == 1)

No sé si la primera forma es un estilo de codificación centrado en WordPress, pero solo lo he notado en código de WP (ya sea del núcleo o de código de terceros).

20
Comentarios

Condiciones Yoda estas son.

fuxia fuxia
5 ene 2013 01:44:51

La segunda forma es más fácil de leer; la primera ayudará a prevenir el error de un solo =

shea shea
5 ene 2013 01:50:01

Mmm... ¿cómo es que esto está fuera de tema? Desde entonces he descubierto en los comentarios añadidos a mi pregunta que se recomienda codificar para WP usando condiciones Yoda según el [Codex] ( http://codex.wordpress.org/WordPress_Coding_Standards#Yoda_Conditions)

akTed akTed
5 ene 2013 03:01:47

@AKTed Está fuera de tema porque no es específico de WordPress, es una pregunta de PHP. Según las Preguntas Frecuentes: no específico de WordPress (incluso si ocurre en su contexto)

Milo Milo
5 ene 2013 03:28:21

@Milo: Al principio pensé lo mismo, pero sí es específico de WordPress en el contexto de que WordPress lo incluye en su Codex como la forma en que quieren que se haga. Cualifica como una pregunta de PHP, pero mi pregunta era específicamente sobre notarlo en el código de WP muchísimo.

akTed akTed
5 ene 2013 04:56:20

@toscho & Milo: Mi pregunta se ajusta a las [preguntas frecuentes] en estos dos aspectos: 1. Satisface la sección "WordPress - Stack Exchange es para que desarrolladores y administradores de WordPress hagan preguntas sobre:"... desarrollo y mejores prácticas de gestión 2. Dado que WordPress enumera las condiciones Yoda en la sección de Estándares de Codificación del Codex como un método preferido de codificación, no entra en la sección de preguntas frecuentes "no específica de WordPress (incluso si ocurre en su contexto)"

akTed akTed
5 ene 2013 05:12:06

@AKTed Por favor usa [meta] para discutir nuestro alcance.

fuxia fuxia
5 ene 2013 06:23:02

@toscho: No tengo suficiente reputación para preguntar en Meta. Además, tu declaración "cerrado como fuera de tema..." me dice que deje "comentarios..." ¡justo aquí! Si bien estoy seguro de que es la declaración estándar de StackExchange para cerrar esta pregunta, efectivamente eres quien lo está diciendo. Entonces, ¿cuál es mi recurso? ¿No puedo usar WP Meta todavía, y aparentemente no debería discutirlo aquí (aunque "tú" me dijiste que lo hiciera)?

akTed akTed
6 ene 2013 06:20:15

@AKTed Necesitas 5 puntos. No me digas que es demasiado. :)

fuxia fuxia
6 ene 2013 06:23:11

Soy tan nuevo aquí que todavía no los tengo :(

akTed akTed
6 ene 2013 06:23:45

Y a quien haya votado negativamente mi pregunta, ¿por qué? ¿Porque sabías algo que yo no? Si ese es el caso, cada pregunta debería ser votada negativamente. Bah, qué pérdida de tiempo con esta tontería.

akTed akTed
6 ene 2013 06:25:49

A veces la gente vota negativo si la pregunta no es particularmente útil para el sitio. No lo tomes demasiado personal; no es como si tuvieras reputación que perder ;)

shea shea
6 ene 2013 06:30:41

@bungeshea Lo siento, pero esa etiqueta no está ahí para eso. De hecho, ni siquiera debería estar aquí.

kaiser kaiser
6 ene 2013 06:54:58

Esta pregunta está dentro del tema porque se relaciona con los estándares de codificación de WordPress documentados. Reabierta y respondida como tal.

EAMann EAMann
7 ene 2013 18:38:49

Ahí lo tienes, buen título, buena respuesta, votos positivos, El Camino del Stack ;)

brasofilo brasofilo
7 ene 2013 18:51:39

@brasofilo Tenía la impresión de que el "Camino del Stack" estaba ilustrado en este hilo de comentarios, al menos hasta que EAMann dio una Respuesta. :)

akTed akTed
7 ene 2013 18:54:37

@EAMann El formato ZIP también se menciona en Codex, así que es relevante aquí, ¿verdad?

fuxia fuxia
8 ene 2013 02:16:07

@toscho El formato ZIP en sí mismo, no. Pero preguntas sobre comprimir/descomprimir desde WordPress potencialmente sí.

EAMann EAMann
8 ene 2013 02:22:27

Vale, normalmente yo soy el Policía del Alcance, y esto es demasiado pedante incluso para mí. Diría que una pregunta que encaja tan precisamente con los Estándares de Codificación de WordPress como esta no solo es apropiada para WPSE, sino que también brinda una gran oportunidad para profundizar en el Estándar de Codificación de WordPress en cuestión. Esto fue una bola rápida justo por el centro; afortunadamente @EAMann lo reconoció y le dio con todo.

Chip Bennett Chip Bennett
9 ene 2013 01:43:16
Mostrar los 15 comentarios restantes
Todas las respuestas a la pregunta 1
1
12

Este estilo de codificación se conoce como Condición Yoda, y no es algo específico de WordPress. He utilizado el mismo estilo en código C++, C# e incluso JavaScript.

El principal beneficio de una Condición Yoda es que evita la asignación accidental de valores debido a un error tipográfico. Considera el siguiente error (comúnmente visto en el mundo real):

if ( $some_variable = 1 ) {
    // ...
}

Esto siempre se evaluará como true, pero tiene la consecuencia adicional de asignar el valor 1 a $some_variable. Aunque a veces esto es intencional. En WordPress específicamente, a menudo verás cosas como:

if ( $post = some_function( $_POST['id'] ) ) {
    // ...
} else {
    // ...
}

El propósito de este código es asignar un nuevo valor a la variable $post, y funciona porque la función some_function() que se está utilizando devolverá false en caso de error.

Las Condiciones Yoda (invirtiendo el orden del operador de igualdad ==) te protegen de asignar valores accidentalmente cuando no era tu intención. Si cometes un error y solo pones un = en el código, obtendrás un error porque no puedes asignar a un valor regular:

if ( 1 = $some_variable ) {
    // ...
}

Como dije, esto no es exclusivo de WordPress, ni siquiera de PHP, sin embargo es parte de los estándares de codificación requeridos de WordPress. Si estás escribiendo un plugin o tema para distribución general, o contribuyendo al núcleo, necesitas saber tanto qué son las Condiciones Yoda como cómo usarlas.

7 ene 2013 18:38:07
Comentarios

Gracias por una respuesta muy descriptiva, muy agradecido.

akTed akTed
7 ene 2013 18:50:04