Sí
Siempre debes usar paréntesis ... no controlas el orden de prioridad ... el desarrollador del compilador sí lo hace. 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
He heredado una aplicación de marco principal. Un día, fuera del azul claro, dejó de funcionar. Eso es todo ... puf, simplemente se detuvo.
Mi trabajo era hacer que funcionara lo más rápido posible. El código fuente no se había modificado durante dos años, pero de repente simplemente se detuvo. Intenté compilar el código y se rompió en la línea XX. Miré la línea XX y no pude 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 a abajo. Comencé a crear un diagrama de flujo de lo que estaba pasando. El código estaba tan complicado que casi no podía entenderlo. Me rendí tratando 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 frenos de línea blanca y de línea para hacer que el código sea más legible. Noté que, en algunos casos, existían condiciones que combinaban AND y OR, y no era claramente distinguible entre qué datos se ANDaban y qué datos se ORed. Así que empecé a poner paréntesis alrededor de las condiciones AND y OR para que sean más legibles.
A medida que avanzaba lentamente limpiándola, guardaba mi trabajo periódicamente. En un momento intenté compilar el código y algo extraño sucedió. El error había pasado la línea de código original y ahora estaba más abajo. Así que continué, esparciendo las condiciones AND y OR con parens. Cuando terminé de limpiarlo funcionó. Go Figure.
Entonces decidí visitar la tienda de operaciones y preguntarles si habían instalado recientemente algún componente nuevo en el marco principal. Dijeron que sí, recientemente hemos actualizado 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 el código ambiguo, lo que significa que no se pudo resolver una combinación poco clara de AND y OR.
Lección que aprendí de esto ... SIEMPRE, SIEMPRE, SIEMPRE use parens para separar las condiciones AND las condiciones OR cuando se usan en conjunción entre sí.
Ejemplo simplificado
SI Producto = 191 O Producto = 193 Y Modelo="ABC" O Producto = 201 O Producto = 202 Y Modelo="DEF" ... (código lleno de varios de estos)
Esta es una versión simplificada de lo que encontré. También hubo otras condiciones con sentencias lógicas booleanas compuestas.
Recuerdo haberlo cambiado a:
IF ((Producto = 191 O Producto = 193) Y Modelo="ABC") O ((Producto = 201 O Producto = 202) Y Modelo="DEF") ...
No pude reescribirlo porque no había especificaciones. El autor original ya se había ido. Recuerdo presión intensa. Un barco de carga completo 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ó preguntar a las Operaciones de la Red si modificaron algo después de que noté que agregar parens cambió los errores.