Los estados a menudo incluyen los operadores de cortocircuitos. Por lo tanto, teniendo en cuenta este ejemplo:
if (a=func(x) && b=func(y))
{
// do this
}
puede que no sea inmediatamente obvio, pero la segunda asignación puede ocurrir solamente si el primer regresaron >0
, y si func(y)
tenían otros efectos secundarios que esperabas, que no iba a suceder ya sea .
En resumen, si sabes lo que estás haciendo y entiendes los efectos secundarios, entonces no hay nada de malo en ello. Sin embargo, debes considerar la posibilidad de que alguien más pueda estar manteniendo tu código cuando te hayas ido y que quizás no tengan tanta experiencia como tú.
Además, los futuros mantenedores pueden pensar que pretende lo siguiente:
if (a==func(x) && b==func(y)) ...
Si "fijar" su código, que en realidad se rompen.
yo habría pensado que la doble paréntesis (el paréntesis alrededor de la asignación) debe indicar que la asignación es intencional. Algunos compiladores suprimen la advertencia en este caso, creo. – Draemon
Verifique la respuesta de la marca: http://stackoverflow.com/a/2576969/560287 –
Apague esa advertencia, reemplácela por desarrollo impulsado por prueba. ;) La diferencia en el comportamiento entre '=' y '==' es tan grande que tus pruebas deberían fallar. (a diferencia de '==' vs '===' - Me gustaría que mi IDE lo advierta, preferiblemente) –