sim
Você sempre deve usar parênteses ... você não controla a ordem de precedência ... o desenvolvedor do compilador. Aqui está uma história que aconteceu comigo 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 aí ... só parou.
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. Tentei compilar o código e ele quebrou na linha XX. 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 era a culpada.
Imprimi o código e comecei a analisá-lo de cima para baixo. Comecei a criar um fluxograma do que estava acontecendo. O código era tão complicado que eu mal conseguia entender. Desisti de tentar fazer um fluxograma. Eu tinha medo de fazer alterações sem saber como essa alteração afetaria o restante do processo, principalmente porque não tinha detalhes do que o aplicativo fazia ou de onde estava na cadeia de dependência.
Então, decidi começar no topo do código-fonte e adicionar freios à linha branca e à espinha para tornar o código mais legível. Percebi que, em alguns casos, havia condições combinadas AND
e OR
que não eram claramente distinguíveis entre quais dados estavam sendo AND
editados e quais estavam sendo OR
editados. Então comecei a colocar parênteses em torno das condições AND
e OR
para torná-las mais legíveis.
À medida que me afastava lentamente, eu periodicamente salvava meu trabalho. A certa altura, tentei compilar o código e aconteceu uma coisa estranha. O erro saltou da linha de código original e agora estava mais abaixo. Então eu continuei, speparating o AND
e OR
condições com parênteses. Quando terminei de limpá-lo, funcionou. Vai saber.
Decidi então visitar a loja de operações e perguntar se eles haviam instalado recentemente algum novo componente no chassi principal. Eles disseram que sim, recentemente atualizamos o compilador. Hmmmm.
Acontece que o compilador antigo avaliou a expressão da esquerda para a direita, independentemente. A nova versão do compilador também avaliou expressões do código da esquerda para a direita, mas ambíguo, o que significa uma combinação pouco clara AND
e OR
não pôde ser resolvida.
Lição que aprendi com isso ... SEMPRE, SEMPRE, SEMPRE use parênteses para separar AND
condições e OR
condições quando usadas em conjunto.
Exemplo simplificado
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...
(código repleto de várias delas)
Esta é uma versão simplificada do que encontrei. Havia outras condições também com instruções lógicas booleanas compostas.
Lembro-me de encaminhá-lo para:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
Não pude reescrevê-lo porque não havia especificações. O autor original se foi há muito tempo. Lembro-me de uma pressão intensa. Um navio de carga inteiro estava preso no porto e não podia ser descarregado porque esse pequeno programa não funcionava. Nenhum aviso. Nenhuma alteração no código fonte. Só me ocorreu perguntar às Operações de Rede se elas modificaram alguma coisa depois que eu notei que adicionar parênteses alterava os erros.