Le sequenze di ifs sono fragili e una causa comune di errore. Le catene di if..else if sono anche peggio.
Ci sono tre cause principali di errore:
- Ristabilire la condizione di controllo
- Omissione di un'opzione o opzioni, in modo che non ci siano condizioni non soddisfatte, con conseguenze inaspettate per il codice.
- Inavvertitamente con condizioni di sovrapposizione.
Esempio di errore 1:
if (a == 0) ...
if (a = 1) ...
if (a == 2) ...
Guarda il secondo controllo. L'effetto è che se a non è zero, sarà sempre impostato su 1. Con un'istruzione switch non puoi farlo veramente; digiti la condizione solo una volta , in modo che tu possa sbagliare per tutto (che diventerà presto evidente) o giusto per tutto.
Il secondo e il terzo tipo di errore sono possibili con lo switch ma meno probabile, in primo luogo perché switch offre un'opzione predefinita e in secondo luogo perché il layout è molto più chiaro. Con ifs incatenati, digiti ripetutamente l'intero chec; con switch, è sufficiente digitare i valori previsti. Confronto:
if (objectX.checkFunc(x - y) == 0) ...
if (objectX.checkFunc(x - y) == 1) ...
a
switch(objectX.checkFunc(x - y) {
case 0: ...
case 1: ...
default: ...
}
Ma la cosa più importante che ho detto in tutto questo è questa: digiti la condizione solo una volta . La duplicazione del codice è sempre un cattivo odore. Non ripeterti se hai un modo pulito per evitarlo.
Detto questo, non dimenticare l'istruzione break . La maggior parte delle altre lingue che hanno qualcosa come switch non consentono il fall-through; in quelle lingue, è molto più difficile avere condizioni di sovrapposizione nello switch piuttosto che in una sequenza di istruzioni if. In C / C ++ questo non è il caso; la caduta accidentale è l' errore più comune con switch.