LEZIONE:Controlli condizionali: Switch e operatori ternari
Operatore Ternario
L'operatore ternario "? :" è una forma sintetica dell'istruzione if-else, e per questo viene usata per ragioni di comodità e sinteticità del codice. L'operatore "? :" è l'unico operatore ternario del C, infatti opera su tre parametri a differenza degli altri operatori che spesso operano su uno o due parametri.
Qui di seguito presentiamo la sintassi dell'operatore e la corrispondente sintassi di un blocco if-else:
Quindi se l'espressione1 risulta vera, si esegue l'espressione2, altrimenti si esegue l'espressione3. Per esempio il seguente codice assegna, nelle due forme equivalenti, alla variabile "max" il massimo tra "alfa" e "beta":
if (alfa > beta)
max = alfa;
else
max = beta;
// che corrisponde a...
max = (alfa>beta) ? alfa : beta
Switch
Come annunciato, l'istruzione switch ha delle differenze dall'if-else, infatti può essere usata solo in alcuni casi dove:
Viene valutata solamente una variabile, tutte le scelte dipenderanno, infatti, da questa variabile. La variabile deve essere un tipo int, shor, long o char;
Ogni singolo valore della variabile può controllare solo una scelta. Una scelta finale, chiamata default è incaricata di catturare tutti i valori dei casi non specificati;
L'istruzione switch ha la seguente struttura:
switch (espressione) {
case elem1:
istruzione1;
break; opt
case elem2:
istruzione2;
break; opt
...
...
...
case elemn:
istruzionen;
break; opt
default:
istruzione;
break; opt
}
Notiamo che lo switch ha, inoltre, una struttura abbastanza particolare, è a cascata, cioè se eseguo il primo caso (avendo sotto degli altri) e non metto un break per uscire, continua ad eseguire anche le istruzioni successive che fanno parte di altre casistiche; questa struttura ricorda molto quella adottata nei file batch (.bat) utilizzati con il DOS e permette di ottenere effetti interessanti sulla selezione del codice, risparmiandone quando è comune a più casistiche. Ma vediamo l'esempio pratico, assumendo di avere la variabile intera "numero" che può assumere valori maggiori od uguali a zero:
switch (numero) {
case 0:
printf("Nessuno");
break;
case 1:
printf("Uno");
break;
case 2:
printf("Due");
break;
case 3:
case 4:
case 5:
printf("Valore positivo piccolo");
break;
default:
printf("Valore positivo grande");
break;
}
ESEMPIO PRATICO (Visualizza il sorgente completo)
L'IF, all'interno del programma, viene usato in larga misura; ad esempio, per avviare le scelte adeguate del menu si utilizza
una serie di IF-ELSE:
101 else if (scelta == 1) // Visualizzo i contatti presenti
102 { // ELSEIF 1 - OPEN
103
104 visualizzaContatto(lista);
105
106 } // ELSEIF 1 - CLOSE
107 else if (scelta == 2) // Aggiungo un nuovo contatto
108 { // ELSEIF 2 - OPEN
109
110 lista = aggiungiContatto(lista);
111
112 } // ELSEIF 2 - CLOSE