2010-05-14 11 views
5

que he visto mucho este tipo de código recientemente:Asignación de los condicionales

if ($foo = $bar->getFoo()) 
{ 
    baz($foo); 
} 

¿Esto se considera buena o mala práctica?

Por ejemplo, el IDE Netbeans dar un aviso si se utiliza este tipo de código:

Posible asignación accidental, asignaciones en condiciones deben ser evitados

¿Qué opinas?

+0

¿Querías if ($ foo == $ bar-> getFoo())? –

+8

No, ese es el punto :) – DuoSRX

+0

Esto obviamente voló sobre mi cabeza :) Entonces el condicional es comprobar que $ bar-> getFoo() no causa un error? ¿Está bien? –

Respuesta

4

Es una herramienta útil que tengo que admitir el uso de vez en cuando para evitar una línea adicional para una tarea. Por un lado, puede ser una mala práctica por algunos porque:

  • No es un idioma disponible en otros idiomas comunes
  • Es menos legible

Por otro lado:

  • La conversión boleana implícita no ocurre en otros idiomas, pero se cuenta ampliamente donde existen. Por el contrario, existen operadores de asignación condicional en Ruby y Javascript (como ejemplos), pero no en PHP. ¿Deberíamos limitar nuestro uso de construcciones idiomáticas solo a aquellas que se encuentran en todos los idiomas similares? Probablemente no.
  • ¿Menos legible a quién?

Debo notar que trato de evitarlo porque me resulta menos legible la mayor parte del tiempo, pero es una preferencia puramente personal para mí. Donde lo encuentro útil, lo uso.

4

Es una forma fácil de colar los errores, pero es una práctica común en PHP. Especialmente durante cosas como recorridos de directorios en los que hace cosas como while (($dir = readdir($handle)) !== FALSE)

Si puede evitarlo. Evítalo.

+0

El '! == FALSE' es redundante, pero hace que la declaración sea más comprensible. Pero ¿por qué no usar '== TRUE'? ¡Es aún más simple! – T30

+1

readdir devuelve FALSE si el directorio está vacío. De lo contrario, devuelve el siguiente elemento en el directorio. Debes verificar que no falso siga leyendo. Debería hacer una verificación de tipo estricta con un triple igual. – jlindenbaum

2

Si bien esta es una sintaxis válida y los resultados serán los esperados, es un mal hábito. Falta legibilidad, existe el potencial de desarrollar un mal hábito de put = cuando quisiste decir ==, y tus ojos seguirán volviendo a esta línea cuando trates de encontrar errores reales dentro de una aplicación. No usaría este estilo de escritura. En este caso, solo obtenga el valor de retorno y luego verifique el valor de retorno ... o mejor aún, use el manejo de excepciones para evitar atascarse con muchas sentencias if.

+1

+1 esto es un remanente de C días, donde esto era práctica común (mala). Mucha gente todavía hace esto porque piensan que les hace [parecer inteligente] (http://stackoverflow.com/questions/2101875/what-are-some-programming-questions-or-mistakes-you-get-wrong- only-as-you-get-b/2151844 # 2151844). –

4

Utilizo esta sintaxis todo el tiempo ... Me parece 100% legible, porque estoy tan acostumbrado a ver este tipo de línea. Tener una línea de código adicional para la tarea me parece una pérdida de espacio.

+1

El código está destinado a ser leído. Si una línea adicional de código aumenta la legibilidad -> agregue una línea. No me gustaría heredar tu código minificado. –

Cuestiones relacionadas