Successivo: Istruzione switch, Precedente: Istruzione do, Su: Istruzioni [Contenuti][Indice]
for
L’istruzione for
rende più agevole contare le iterazioni di un ciclo.
La forma generale dell’istruzione for
è simile a questa:
for (inizializzazione; condizione; incremento) corpo-del-ciclo
La parti inizializzazione, condizione e incremento sono
espressioni awk
a piacere, e corpo-del-ciclo indica qualsiasi
istruzione awk
.
L’istruzione for
comincia con l’esecuzione di inizializzazione.
Poi, finché
la condizione è vera, esegue ripetutamente corpo-del-ciclo,
e quindi incremento. Tipicamente, inizializzazione imposta una
variabile a zero o a uno, incremento aggiunge uno alla stessa e
condizione ne confronta il valore rispetto al numero desiderato di
iterazioni.
Per esempio:
awk ' { for (i = 1; i <= 3; i++) print $i }' inventory-shipped
Questo programma stampa i primi tre campi di ogni record in input, mettendo un unico campo in una riga in output.
Non è possibile impostare
più di una variabile nella parte di
inizializzazione senza usare un’istruzione di assegnamento multiplo,
come ‘x = y = 0’. Ciò ha senso solo se tutti i valori iniziali
sono uguali. (Ma è possibile inizializzare ulteriori variabili scrivendo
i relativi assegnamenti come istruzioni separate prima del ciclo
for
.)
Lo stesso vale per la parte incremento. Se serve incrementare ulteriori
variabili, questo va fatto con istruzioni separate alla fine del ciclo.
L’espressione composta del linguaggio C, che usa l’operatore virgola [,]
del C, sarebbe
utile in questo contesto, ma non è
prevista in awk
.
Molto spesso, incremento è un’espressione di incremento, come nell’esempio precedente. Ma questo non è obbligatorio; può trattarsi di un’espressione qualsiasi. Per esempio, la seguente istruzione stampa tutte le potenze di due comprese tra 1 e 100:
for (i = 1; i <= 100; i *= 2) print i
Se non è necessaria, ognuna delle tre espressioni fra
parentesi che segue la parola chiave for
può essere omessa. Quindi,
‘for (; x > 0;)’ equivale a ‘while (x > 0)’. Se la
condizione è omessa del tutto, è ritenuta sempre vera, producendo
un ciclo infinito (cioè, un ciclo che non finisce mai).
Molto spesso, un ciclo for
è un’abbreviazione per un ciclo while
,
come si può vedere qui:
inizializzazione while (condizione) { corpo-del-ciclo incremento }
La sola eccezione è quando l’istruzione continue
(vedi la sezione L’istruzione continue
) è usata
all’interno del ciclo. Se si modifica un’istruzione for
sostituendola con un’istruzione while
ciò può cambiare l’effetto dell’istruzione continue
posta all’interno
del ciclo.
Il linguaggio awk
ha un’istruzione for
oltre all’istruzione
while
perché un ciclo for
è spesso più semplice da scrivere,
e viene in mente più naturalmente.
Contare il numero di iterazioni è
molto frequente nei cicli. Può essere più facile pensare a questo conto come
parte del ciclo, piuttosto che come qualcosa da fare all’interno del ciclo.
Esiste una versione alternativa al ciclo for
, per esaminare tutti
gli indici di un vettore:
for (i in vettore) fai qualcosa con vettore[i]
Vedi la sezione Visitare tutti gli elementi di un vettore
per maggiori informazioni su questa versione del ciclo for
.
Successivo: Istruzione switch, Precedente: Istruzione do, Su: Istruzioni [Contenuti][Indice]