Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= Istruzione IFIstruzione FOR =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Istruzione SWITCH

Permette di selezionare il blocco di codice da eseguire in base al valore intero, lo switch, dato da una espressione. Ogni blocco di codice deve essere contrassegnato da uno o più valori target che devono essere costanti intere letterali o costanti simboliche dichiarate con CONST. Esempio:

SWITCH n_legs DO
CASE 0:
    (* non risponde *)
CASE 2:
    print("human, bird\n")
CASE 4:
    print("dog, horse\n")
CASE 6:
    print("bee, ant\n")
CASE 8:
    print("spider\n")
CASE 3, 7:
    print("a monster\n")
CASE 30:
    print("lithobius\n")
ELSE
    print("sorry, I don't know any animal with "
    	+ "this number of legs\n")
END

Lo stesso algoritmo può essere implementato con una istruzione IF:

IF n_legs = 0 THEN
    (* non risponde *)
ELSIF n_legs = 2 THEN
    print("human, bird\n")
ELSIF n_legs = 4 THEN
    print("dog, horse\n")
ELSIF n_legs = 6 THEN
    print("bee, ant\n")
ELSIF n_legs = 8 THEN
    print("spider\n")
ELSIF n_legs = 3 OR n_legs = 7 THEN
    print("a monster\n")
ELSIF n_legs = 30 THEN
    print("lithobius\n")
ELSE
    print("sorry, I don't know any animal with "
    	+ "this number of legs\n")
END

L'istruzione SWITCH è una versione specializzata della istruzione IF e per certi versi più limitata. Si hanno però alcuni vantaggi:

  • In certi casi, come quello dell'esempio, lo SWITCH permette di scrivere un codice più snello e più chiaro.
  • Inoltre permette al compilatore di eseguire il controllo su eventuali target duplicati.
  • Se il ramo ELSE viene omesso, in fase di esecuzione viene emesso un errore fatale nel caso che il valore dello switch non sia compreso tra quelli previsti nei target.
  • L'istruzione SWITCH permette una implementazione in codice macchina ottimizzata nelle prestazioni rispetto alla equivalente catena di IF.
  • Se al posto della variabile n_legs avessimo una espressione, l'istruzione IF ci costringerebbe a ripetere l'espressione tante volte, oppure dovremmo introdurre una variabile temporanea.

In conclusione, l'istruzione SWITCH diventa utile ogni volta che ricorrano una o più delle motivazioni precedenti.

 
<= Istruzione IFIstruzione FOR =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione