Ripartendo da quanto detto nella lezione precedente, è possibile combinare più condizioni a cascata determinando l'esecuzione del blocco di codice più vicino alla prima condizione vera oppure il blocco associato all'ultimo else
nel caso in cui tutte le condizioni siano false.
Il seguente è un esempio di uso di questa forma di if
:
if (x%2 == 0) {
messaggio = x + " è pari";
} else if (x%2 == 1) {
messaggio = x + " è dispari";
} else {
messaggio = x + " non è un numero";
}
L'if..else if...else
non è altro che una forma compatta di if...else
annidati, come possiamo vedere dal seguente codice equivalente all'esempio precedente:
if (x%2 == 0) {
messaggio = x + " è pari";
} else {
if (x%2 == 1) {
messaggio = x + " è dispari";
} else {
messaggio = x + " non è un numero";
}
}
Switch...case
Quando siamo di fronte a diverse alternative, anche un if a cascata può risultare difficile da leggere. In questi casi possiamo ricorrere all'istruzione switch, il cui schema sintattico è:
switch (espressione) {
case espressione1:
istruzioni1;
break;
case espressione2:
istruzioni2;
break;
// ...
default:
istruzioni4;
break;
}
L'espressione di riferimento dello switch viene confrontata in sequenza con le espressioni dei vari case
. Non appena viene individuata un'espressione corrispondente si esegue il blocco di istruzioni associato. Se non si trova nessuna corrispondenza verrà eseguito il blocco associato alla parola chiave default
. La presenza di un caso di default è comunque opzionale.
È importante però inserire l'istruzione break
al termine del blocco di istruzioni per evitare la prosecuzione con il caso successivo.
Il seguente codice mostra l'esempio di if
a cascata visto in precedenza implementato con uno switch
:
switch (x%2) {
case 0:
messaggio = x + " è pari";
break;
case 1:
messaggio = x + " è dispari";
break;
default:
messaggio = x + " non è un numero";
break;
}
Talvolta possiamo decidere di non mettere l'istruzione break
in corrispondenza di uno o più case
perchè vogliamo eseguire uno stesso blocco di codice per un gruppo di valori. Il seguente è un esempio del genere:
switch (voto) {
case 1:
case 2:
case 3:
case 4:
case 5:
giudizio = "insufficiente";
break;
case 6:
giudizio = "sufficiente";
break;
case 7:
giudizio = "discreto";
break;
case 8:
giudizio = "buono";
break;
case 9:
giudizio = "ottimo";
break;
case 10:
giudizio = "eccellente";
break;
default:
messaggio = "non classificato";
break;
}
In questo caso i voti dall'uno al cinque eseguiranno tutti la stessa istruzione.