si
Siempre debes usar paréntesis ... no controlas el orden de precedencia ... el desarrollador del compilador sí. Aquí hay una historia que me sucedió sobre el no uso de paréntesis. Esto afectó a cientos de personas durante un período de dos semanas.
Razón del mundo real
Heredé una aplicación de marco principal. Un día, de la nada, dejó de funcionar. Eso es todo ... poof se detuvo.
Mi trabajo consistía en hacerlo funcionar lo más rápido posible. El código fuente no había sido modificado durante dos años, pero de repente simplemente se detuvo. Traté de compilar el código y se rompió en la línea XX. Miré la línea XX y no podía decir qué haría que la línea XX se rompiera. Pedí las especificaciones detalladas para esta aplicación y no había ninguna. La línea XX no fue la culpable.
Imprimí el código y comencé a revisarlo de arriba hacia abajo. Comencé a crear un diagrama de flujo de lo que estaba sucediendo. El código era tan complicado que apenas podía entenderlo. Dejé de tratar de hacer un diagrama de flujo. Tenía miedo de hacer cambios sin saber cómo ese cambio afectaría el resto del proceso, especialmente porque no tenía detalles de lo que hizo la aplicación o dónde estaba en la cadena de dependencia.
Entonces, decidí comenzar en la parte superior del código fuente y agregar espacios en blanco y frenos de línea para que el código sea más legible. Noté, en algunos casos, si las condiciones se combinaban AND
y OR
no se distinguía claramente entre qué datos se estaban AND
editando y qué datos se estaban OR
editando. Así que empecé a poner paréntesis alrededor de los AND
y las OR
condiciones para que sean más legibles.
A medida que avanzaba lentamente para limpiarlo, periódicamente guardaba mi trabajo. En un momento intenté compilar el código y sucedió algo extraño. El error había pasado la línea de código original y ahora estaba más abajo. Así que continué, speparating el AND
y OR
condiciones con parens. Cuando terminé de limpiarlo funcionó. Imagínate.
Luego decidí visitar el taller de operaciones y preguntarles si habían instalado recientemente algún componente nuevo en el marco principal. Dijeron que sí, recientemente actualizamos el compilador. Hmmmm
Resulta que el antiguo compilador evaluó la expresión de izquierda a derecha independientemente. La nueva versión del compilador también evaluó expresiones de izquierda a derecha pero código ambiguo, lo que significa una combinación poco clara AND
y OR
no se pudo resolver.
Lección que aprendí de esto ... SIEMPRE, SIEMPRE, SIEMPRE use parens para AND
condiciones separadas y OR
condiciones cuando se usan en conjunción entre sí.
Ejemplo simplificado
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...
(código lleno de varios de estos)
Esta es una versión simplificada de lo que encontré. También había otras condiciones con sentencias lógicas booleanas compuestas.
Recuerdo haberlo cambiado a:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
No pude reescribirlo porque no había especificaciones. El autor original ya se había ido. Recuerdo una intensa presión. Todo un buque de carga quedó varado en el puerto y no se pudo descargar porque este pequeño programa no funcionó. Sin advertencia. No hay cambios en el código fuente. Solo se me ocurrió preguntarle a las operaciones de red si modificaron algo después de que noté que agregar parens cambiaba los errores.