Sì
Dovresti sempre usare le parentesi ... non controlli l'ordine di precedenza ... lo sviluppatore del compilatore lo fa. Ecco una storia che mi è accaduta riguardo al non utilizzo delle parentesi. Ciò ha colpito centinaia di persone per un periodo di due settimane.
Motivo mondiale reale
Ho ereditato un'applicazione principale. Un giorno, dal nulla, ha smesso di funzionare. Questo è tutto ... puff si è appena fermato.
Il mio compito era di farlo funzionare il più velocemente possibile. Il codice sorgente non era stato modificato per due anni, ma all'improvviso si è fermato. Ho provato a compilare il codice e si è rotto sulla linea XX. Ho guardato la riga XX e non saprei dire cosa avrebbe fatto rompere la linea XX. Ho chiesto le specifiche dettagliate per questa applicazione e non ce n'erano. La linea XX non era il colpevole.
Ho stampato il codice e ho iniziato a rivederlo dall'alto verso il basso. Ho iniziato a creare un diagramma di flusso di ciò che stava accadendo. Il codice era così contorto che non riuscivo nemmeno a capirlo. Ho rinunciato a cercare di diagrammarlo. Avevo paura di apportare modifiche senza sapere in che modo tale modifica avrebbe influito sul resto del processo, soprattutto dal momento che non avevo i dettagli di ciò che l'applicazione faceva o dov'era nella catena delle dipendenze.
Quindi, ho deciso di iniziare nella parte superiore del codice sorgente e aggiungere whitespce e line brakes per rendere il codice più leggibile. Ho notato che, in alcuni casi, c'erano condizioni che combinavano AND e OR e non era chiaramente distinguibile tra i dati che erano ANDed e quali dati venivano elaborati. Così ho iniziato a mettere le parentesi attorno alle condizioni AND e OR per renderle più leggibili.
Mentre andavo piano piano a ripulirlo, avrei periodicamente salvato il mio lavoro. A un certo punto ho provato a compilare il codice e una cosa strana è accaduta. L'errore era saltato oltre la linea di codice originale e ora era più in basso. Così ho continuato, spacciando le condizioni AND e OR con i parens. Quando ho finito di ripulirlo ha funzionato. Vai alla figura.
Ho quindi deciso di visitare il negozio delle operazioni e chiedere loro se avessero installato recentemente nuovi componenti sul frame principale. Hanno detto di sì, abbiamo recentemente aggiornato il compilatore. Hmmmm.
Risulta che il vecchio compilatore ha valutato l'espressione da sinistra a destra indipendentemente. La nuova versione del compilatore ha anche valutato le espressioni da sinistra a destra, ma il codice ambiguo, il che significa che la combinazione non chiara di AND e OR non può essere risolta.
Lezione Ho imparato da questo ... SEMPRE, SEMPRE, utilizzare SEMPRE le condizioni AND e le condizioni OR separate quando sono usate in combinazione tra loro.
Esempio semplificato
Prodotto IF = 191 OR Prodotto = 193 AND Modello="ABC" O Prodotto = 201 OR Prodotto = 202 AND Modello="DEF" ... (codice cosparso di molti di questi)
Questa è una versione semplificata di ciò che ho incontrato. Esistevano anche altre condizioni con istruzioni logiche booleane composte.
Ricordo di averlo fatto notare a:
IF ((Prodotto = 191 OR Prodotto = 193) AND Modello="ABC") OR ((Prodotto = 201 OR Prodotto = 202) E Modello="DEF") ...
Non potevo riscriverlo perché non c'erano specifiche. L'autore originale era sparito da tempo. Ricordo una pressione intensa. Un'intera nave mercantile era bloccata in porto e non poteva essere caricata perché questo piccolo programma non funzionava. Nessun avvertimento. Nessuna modifica al codice sorgente. Mi è solo venuto in mente di chiedere alle Operazioni di rete se hanno modificato qualcosa dopo aver notato che l'aggiunta di Paren ha modificato gli errori.