Sim
Você deve sempre usar parênteses ... você não controla a ordem de precedência ... o desenvolvedor do compilador faz. Aqui está uma história que me aconteceu sobre o não uso de parênteses. Isso afetou centenas de pessoas durante um período de duas semanas.
Razão do Mundo Real
Eu herdei um aplicativo de quadro principal. Um dia, do nada, parou de funcionar. É isso ... poof acabou de parar.
Meu trabalho era fazê-lo funcionar o mais rápido possível. O código-fonte não foi modificado por dois anos, mas de repente parou. Eu tentei compilar o código e ele quebrou na linha XX. Eu olhei para a linha XX e não sabia dizer o que faria a linha XX quebrar. Eu pedi as especificações detalhadas para esta aplicação e não havia nenhuma. A linha XX não foi a culpada.
Imprimi o código e comecei a revisá-lo de cima para baixo. Comecei a criar um fluxograma do que estava acontecendo. O código era tão confuso que eu mal conseguia entender. Eu desisti de tentar fazer o fluxograma. Eu estava com medo de fazer alterações sem saber como essa mudança afetaria o restante do processo, especialmente porque eu não tinha detalhes sobre o que o aplicativo fazia ou onde estava na cadeia de dependências.
Então, decidi começar no topo do código-fonte e adicionar whitespce e line brakes para tornar o código mais legível. Percebi que, em alguns casos, havia condições que combinavam ANDs e ORs e não eram claramente distinguíveis entre quais dados estavam sendo ANDed e quais dados estavam sendo ORed. Então comecei a colocar parênteses em torno das condições AND e OR para torná-las mais legíveis.
Como eu lentamente abaixei a limpeza, eu periodicamente salvaria meu trabalho. Em um ponto eu tentei compilar o código e uma coisa estranha aconteceu. O erro saltou na linha original do código e agora estava mais baixo. Então continuei, separando as condições AND e OR com os parênteses. Quando terminei a limpeza, funcionou. Vá para a Figura.
Eu então decidi visitar a loja de operações e perguntar se eles tinham instalado recentemente novos componentes na estrutura principal. Eles disseram sim, nós recentemente atualizamos o compilador. Hmmmm.
Acontece que o compilador antigo avaliava a expressão da esquerda para a direita, independentemente. A nova versão do compilador também avaliava as expressões da esquerda para a direita, mas o código ambíguo, o que significa que a combinação não clara de ANDs e ORs não pôde ser resolvida.
Lição que aprendi com isso ... SEMPRE, SEMPRE use SEMPRE os parênteses para separar as condições AND e as condições OR quando eles são usados em conjunção um com o outro.
Exemplo simplificado
Produto IF = 191 OR Produto = 193 E modelo="ABC" ou produto = 201 OR Produto = 202 E modelo="DEF" ... (código repleto de vários destes)
Esta é uma versão simplificada do que encontrei. Havia outras condições com instruções lógicas booleanas compostas também.
Lembro-me de mandar para:
SE ((Produto = 191 OR Produto = 193) E Modelo="ABC") OR ((Produto = 201 OR Produto = 202) E Modelo="DEF") ...
Eu não pude reescrevê-lo porque não havia especificações. O autor original foi embora há muito tempo. Eu me lembro de uma pressão intensa. Um navio de carga inteiro estava encalhado no porto e não podia ser descarregado porque este pequeno programa não funcionava. Nenhum aviso. Nenhuma alteração no código-fonte. Só me ocorreu perguntar ao Network Operations se eles modificaram alguma coisa depois que eu notei que adicionar parens alterou os erros.