  |
Condizionale switch |
  |
La condizione è un intero |
L'altro condizionale di cui dobbiamo parlare è lo switch. Si tratta di un comando che seleziona un comando da eseguire in base a un numero interno e non più, come l'if, in base a un booelano. Vediamo la sintassi:
switch (<condizione>) {
case <val1>:
case <val2>:
<comando>
break;
case <val>:
...
break;
default:
...
break;
}
C'è da dire molte cose. Innanzitutto che tra le graffe bisogna racchiudere una serie di comandi. Si tratta di comandi come tutti gli altri. L'unica particolarità è che alcuni di questi comandi possono essere etichettati con un 'casè. Precisiamo meglio che intendo dire per etichettati. Esiste il comando composto "case <valore>: <comando>".
Considerando un comando come " a=1;" allora "case '2': a=1;" è un
comando etichettato. Queste etichette possono essere "impilate", nel
senso che posso fare "case '1': casè2': a=1;". Notare attentamente
che il valore del case deve essere un valore fisso. Ovvero può
essere un numero esplicito. Può anche essere una espressione,
purchè possa essere calcolata una volta e per tutte. Non può
contenere variabili a meno che non siano costanti: cioè può
contenere per esempio MAX solo se MAX è un campo finale statico. Il
motivo di questa restrizione è legato al fatto che in realtà lo
switch, per ragoni di efficienza, viene internamente preparato per
l'esecuzione, e non viene fatta una ricerca dei case ma una solta di
"salto calcolato" in base al valore. Per poter preparare il calcolo
bisogna avere tutti gli elementi e questo è il motivo principale
perchè si impone che il valore dei case venga definito una volta e
per tutte, e non dipenda da variabili calcolate durante l'esecuzione.
  |
valutata la <condizione> si salta al primo case
corripondente |
Una volta che abbiamo costruito il nosto switch correttamente è il
momento di farlo funzionare. L'espressione che si trova tra parentesi
nella testa dello switch deve essere intera. Attenzione, non può
essere un double e, curiosamente, non può essere nemmeno un
long. Una volta calcolato il valore dell'espressione, si va alla
ricerca di un case che ha un valore corrispondente. L'esecuzione salta
quindi a questa etichetta e continua da lì, eseguendo i comandi
successivi.
  |
Se nessuno dei case è soddisfatto si salta al default |
Nel caso in cui il valore calcolato nell'espressione non corrisponda a
nessun caso reale, ovvero non ci siano etichette con un valore
corrispondente, si salta, se c'è, all'etichetta speciale default,
che non prende valori.
|