Programmazione.html.it

  Home page

   Guida Base

   Guida al Java

   Guida al C

   Guida al C++

   Guida al Delphi

   Guida a VB .NET

   Guida al Visual Basic

   Guida al Python

   Guida al'UML

  Forum di discussione
  HTML.it




Guida al linguaggio C
  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:

// Operatore ternario ?
espressione1 ? espressione2 : espressione3

// Corrispondente blocco if-else
if (espressione1)
{
   espressione2
} else {
   espressione3
}

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




Torna a inizio pagina