Successivo: , Precedente: , Su: Istruzioni   [Contenuti][Indice]


7.4.5 L’istruzione switch

Questa sezione descrive una funzionalità disponibile solo in gawk. Se gawk è in modalità compatibile (vedi la sezione Opzioni sulla riga di comando), la funzionalità non è disponibile.

L’istruzione switch consente di valutare un’espressione e di eseguire istruzioni se il valore trovato corrisponde a uno dei case [casi] previsti. Le istruzioni case sono esaminate per cercare una corrispondenza nell’ordine in cui i casi sono definiti nel programma. Se nessuno dei case corrisponde al valore dell’espressione, viene eseguita la sezione default, se è stata specificata.

Ogni case contiene una singola costante, che può essere un numero, una stringa, o una regexp. Viene valutata l’espressione switch, e poi la costante di ogni case viene confrontata di volta in volta con il valore risultante. Il tipo di costante determina quale sarà il confronto: per i tipi numerici o stringa si seguono le regole abituali. Per una costante regexp viene effettuato un confronto tra l’espressione e il valore di tipo stringa dell’espressione originale. Il formato generale dell’istruzione switch è simile a questo:

switch (espressione) {
case valore o espressione regolare:
    corpo-del-caso
default:
    corpo-del-default
}

Il flusso di controllo dell’istruzione switch funziona come per il linguaggio C. Una volta stabilita una corrispondenza con un dato caso, le istruzione che formano il corpo del caso sono eseguite, fino a che non venga trovata un’istruzione break, continue, next, nextfile o exit, o fino alla fine dell’istruzione switch medesima. Per esempio:

while ((c = getopt(ARGC, ARGV, "aksx")) != -1) {
    switch (c) {
    case "a":
        # stampa la dimensione di tutti i file
        all_files = TRUE;
        break
    case "k":
        BLOCK_SIZE = 1024       # in blocchi da 1 Kbyte
        break
    case "s":
        # fa solo le somme
        sum_only = TRUE
        break
    case "x":
        # non esce dal filesystem
        fts_flags = or(fts_flags, FTS_XDEV)
        break
    case "?":
    default:
        uso()
        break
    }
}

Si noti che se nessuna delle istruzioni specificate qui arresta l’esecuzione di un’istruzione case per la quale è stata trovata una corrispondenza; l’esecuzione continua fino al successivo case finché non viene interrotta. In questo esempio, il case per "?" esegue quello di default, che consiste nel chiamare una funzione di nome uso(). (La funzione getopt() qui chiamata è descritta in Elaborare opzioni specificate sulla riga di comando.)


Successivo: , Precedente: , Su: Istruzioni   [Contenuti][Indice]