Ciao a tutti e ben tornati in questo corso di C++ per principianti. Le scorse volte abbiamo visto alcune delle basi necessarie per programmare sia in C++ sia in altri linguaggi, ovvero dei concetti che bene o male si trovano in tutti i linguaggi di programmazione ad alto livello (strutture condizionali, iterative, variabili, ecc.).
Oggi invece parliamo di una struttura che per quanto io sappia esiste solo in C++ e C (se non è così fatemelo notare), ovvero lo switch-case.
In cosa consiste? Si potrebbe far presto e dire che è una serie di if/else scritta in maniera diversa dal solito, ma siccome è nata per uno scopo ben preciso occorre spiegarlo. Diamo un’occhiata alla sintassi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <iostream> using namespace std; int main() { int scelta; cout << "Inserisci un numero che va da 1 a 12. Verrà mostrato in output il mese corrispondente." << endl; cin >> scelta; switch(scelta) { case 1: cout << "Gennaio" <<endl; break; case 2: cout << "Febbraio" <<endl; break; case 3: cout << "Marzo" <<endl; break; case 4: cout << "Aprile" <<endl; break; case 5: cout << "Maggio" <<endl; break; case 6: cout << "Giugno" <<endl; break; case 7: cout << "Luglio" <<endl; break; case 8: cout << "Agosto" <<endl; break; case 9: cout << "Settembre" <<endl; break; case 10: cout << "Ottobre" <<endl; break; case 11: cout << "Novembre" <<endl; break; case 12: cout << "Dicembre" <<endl; break; default: cout << "Il numero inserito non e' valido." <<endl; break; } } |
Il concetto è semplice: la funzione switch prende come parametro una variabile (in questo caso ‘scelta’) e, una volta aperte le parentesi graffe, si comporta in maniera differente a seconda del valore che questa possiede.
Per assegnare un blocco di codice a un determinato valore della variabile ‘scelta’ bisogna scrivere:
1 2 3 |
case <valore che la variabile deve possedere>: <blocco di codice> break; //serve a interrompere lo switch-case |
Il marcatore default consente di definire il comportamento da assumere nel caso in cui nessuno dei marcatori case venga utilizzato.
Come detto in apertura, il costrutto switch-case non è altro che un if/else scritto in maniera diversa. Perché? Beh, lo vediamo subito:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
int main() { int scelta; cout << "Inserisci un numero che va da 1 a 12. Verrà mostrato in output il mese corrispondente." << endl; cin >> scelta; if(scelta==1) { cout<<"Gennaio"<<endl; } else if (scelta==2) { cout<<"Febbraio"<<endl; } else if (scelta == 3) { cout<<"Marzo"<<endl; } else if (scelta == 4) { cout<<"Aprile"<<endl; } else if (scelta == 5) { cout<<"Maggio"<<endl; } else if (scelta == 6) { cout<<"Giugno"<<endl; } else if (scelta == 7) { cout<<"Luglio"<<endl; } else if (scelta == 8) { cout<<"Agosto"<<endl; } else if (scelta == 9) { cout<<"Settembre"<<endl; } else if (scelta == 10) { cout<<"Ottobre"<<endl; } else if (scelta == 11) { cout<<"Novembre"<<endl; } else if (scelta == 12) { cout<<"Dicembre"<<endl; } else { cout<<"Il numero inserito non e' valido."<<endl; } } |
Quest’altro programma corrisponde in tutto e per tutto a quello visto in apertura, solo che viene realizzato con il solo costrutto if/else.
Allora viene spontaneo chiedersi: che senso ha il switch-case?
Beh, da un lato la sua sintassi è senza dubbio più scorrevole da leggere rispetto a quella di una lunga serie di if/else. In più serve a rimarcare concettualmente (dal punto di vista del programmatore) che non si ha a che fare con delle strutture condizionali, bensì con una struttura molto più simile a quella di un menù, ad esempio.
Il programma visto qui sopra, in fin dei conti, non è altro che un menù che consente di visualizzare un mese a scelta, e lo switch-case rende senz’altro meglio il concetto. Questa è in sostanza l’utilità di questo costrutto.
E’ da notare comunque che nella stragrande maggioranza dei linguaggi di programmazione si utilizzano dei semplici if/else perché lo switch-case non viene implementato.
Per esercitarvi su quanto visto oggi vi consiglio di creare un programma che permetta di scegliere i giorni della settimana e tante altre cose che possono venirvi in mente. Magari potete utilizzare delle stringhe invece che dei numeri per compiere la scelta.
Nella prossima lezione faremo un’introduzione sulla programmazione procedurale in C++, con un programma di esempio e con l’introduzione di alcuni concetti nuovi come l’ambito di una variabile.
Sinhuè Angelo Rossi