Molto simile alle istruzioni if, che danno al vostro programma la capacità di prendere decisioni, le istruzioni switch possono essere usate per infondere un po’ di intelligenza in qualsiasi programma. Infatti, una dichiarazione switch è essenzialmente una versione specializzata di una dichiarazione if che altrimenti avrebbe una quantità eccessiva di dichiarazioni di tipo ELSE IF
.
Diamo un’occhiata al perché vengono usati.
A volte, quando infondete la logica nei vostri programmi, vi imbatterete in una situazione in cui, dato il valore di un certo dato, vorrete fare qualcosa di diverso. Normalmente questo potrebbe essere coperto con un’istruzione if, ma cosa succede se vuoi tenere conto di 5, 10, anche 20 situazioni possibili?
Utilizzando un’istruzione if, il tuo programma diventerebbe presto un casino di sintassi if, e non sarebbe molto leggibile o chiaro cosa sta succedendo. I programmatori se ne sono resi conto e così sono nati gli Switch Statements!
Struttura degli Switch Statement
Uno switch statement prende un singolo valore, poi lo confronta con un gruppo di altri valori usando un’espressione booleana. Quando una di queste espressioni booleane è vera, allora uno specifico pezzo di codice verrà eseguito.
Questa struttura vi permette di mappare facilmente un valore ad un pezzo di codice che dovrebbe essere eseguito. Date un’occhiata ad una semplice dichiarazione di switch qui sotto per avere un’idea della sintassi in Ruby:
Copymy_grade = "A "case my_grade when "A" puts "You Pass" when "F" puts "You fail" else puts "Invalid grade "end
Come potete vedere sopra, cominciamo con un valore myGrade
. Essenzialmente vogliamo stampare se lo studente è passato o fallito dato il suo voto (A o F).
Ora che abbiamo il nostro valore, vogliamo impostare una serie di dichiarazioni di caso. Queste dichiarazioni di caso sono essenzialmente il lato destro di un’espressione booleana per l’uguaglianza. Ruby confronterà myGrade
con ciascuno dei valori nelle dichiarazioni di caso (‘A’ e ‘F’) per l’uguaglianza. Se c’è una corrispondenza, allora il codice direttamente sotto l’istruzione case verrà eseguito.
Breaks
Una cosa che è importante tenere a mente con le istruzioni switch è che, per default, Ruby cercherà di controllarle tutte per l’uguaglianza, anche se ottiene una corrispondenza. Questo è diverso da una struttura ELSE IF
dove una volta che una condizione è vera smette di controllare quelle sottostanti.
Perché Ruby controllerà automaticamente ogni caso, non importa cosa, abbiamo bisogno di un modo per prevenire questo (la maggior parte delle volte si vuole prevenire questo). Nel caso di una corrispondenza, voglio che l’istruzione switch smetta di controllare gli altri casi.
Ecco dove entra in gioco la parola chiave break
. La parola chiave break dice a Ruby che abbiamo finito con l’istruzione switch, e che dovrebbe uscirne e andare avanti.
Personalmente mi sono imbattuto nella mia buona dose di bug nei programmi che ho scritto per aver dimenticato di inserire le dichiarazioni di interruzione. Quindi tenetelo bene a mente.
Default
Se esaminate la dichiarazione di switch qui sopra noterete anche la parola chiave default
. Questa parola chiave agisce molto come un ELSE
in una struttura di istruzione if. Qualsiasi codice al di sotto dell’istruzione di default sarà eseguito se nessuno degli altri casi ottiene una corrispondenza. Notate anche che non abbiamo bisogno di una dichiarazione di interruzione all’interno di default.
Generalmente quando si ha una situazione in cui si usa uno switch il default catturerà qualsiasi situazione che non si vuole specificare in una dichiarazione di caso.
Nel caso del programma sopra sta stampando Invalid Grade
per qualsiasi grado che non sia un A
o un F
.
Chiude il discorso
In pratica, le dichiarazioni switch sono usate molto meno frequentemente delle dichiarazioni if. La ragione è che ci sono molte meno situazioni in cui un’istruzione switch è appropriata rispetto ad un’istruzione if. Una buona regola empirica è che se avete bisogno di controllare un valore contro un mucchio di altri valori per l’uguaglianza, allora potreste aver bisogno di uno switch!