Una alternativa al while
è l'istruzione for
. Questa istruzione è generalmente intesa per l'esecuzione di un blocco di codice un numero determinato di volte, ma a ben vedere il for in JavaScript ha sostanzialmente la stessa semantica del while
. Vediamo il suo schema sintattico:
for (inizializzazione; condizione; modifica) {
// istruzioni
}
- inizializzazione: JavaScript esegue l'istruzione specificata in
inizializzazione
prima di avviare le iterazioni (il ciclo). - condizione: è l'espressione booleana che viene valutata prima di eseguire ciascuna iterazione. Se è falsa non viene eseguito il blocco di istruzioni associato al
for
. Se invece lacondizione
è vera viene eseguito il blocco di codice. - modifica: al termine di ciascuna iterazione viene eseguita l'istruzione
modifica
(la più classica è l'incremento di un contatore). Il ciclo poi ricomincia con la valutazione dellacondizione
.
Come per il while
, anche in questo caso è nostra responsabilità fare in modo che la condizione cambi ad ogni passo per garantire l'uscita dal ciclo.
Vediamo come riprodurre l'esempio fatto per il while, utilizzando il costrutto for
:
var y = 1;
var i;
for (i = 1; i <=4; i++) {
y = y * i;
}
Abbiamo trasposto gli elementi del while
all'interno dello schema sintattico del for
.
Come abbiamo detto, il for
è generalmente comodo per effettuare operazioni sugli array, ciclando tra gli elementi.
Vediamo un esempio in cui vengono sommati gli interi contenuti in un array:
var quantita = [12, 34, 45, 7, 19];
var totale = 0;
var i;
for (i = 0; i < 5; i++) {
totale = totale + quantita[i];
}
Inizializzazioni multiple o vuote
L'istruzione for
è molto flessibile, infatti possiamo inserire nelle sezioni inizializzazione e modifica anche gruppi di istruzioni separati da virgole. Ad esempio, possiamo riscrivere il codice dell'esempio precedente nel seguente modo:
var y;
var i;
for (i = 1, y = 1; i <=4; i++) {
y = y * i;
}
In realtà nessuna sezione è obbligatoria. Possiamo quindi, ad esempio, scrivere il nostro ciclo in questo modo del tutto equivalente:
var y = 1;
var i = 1;
for (; i <=4; i++) {
y = y * i;
}
fino ad arrivare ad una situazione del genere sintatticamente quasi identica al while
:
var y = 1;
var i = 1;
for (; i <=4;) {
y = y * i;
i++;
}
for-in e for-of
Per lavorare più comodamente con gli array JavaScript prevede due varianti del for
: il for...in
e il for...of
. Vediamo come come scrivere le istruzioni precedenti facendo uso del for...in
:
var quantita = [12, 34, 45, 7, 19];
var totale = 0;
var indice;
for (indice in quantita) {
totale = totale + quantita[indice];
}
Sfruttando questa variante del for
non abbiamo bisogno di specificare la lunghezza dell'array nè l'istruzione di modifica della condizione. JavaScript rileva che la variabile quantita
è un array ed assegna ad ogni iterazione alla variabile indice
il valore dell'indice corrente.
Utilizzando il for..of
invece possiamo scrivere il ciclo in questo modo:
var quantita = [12, 34, 45, 7, 19];
var totale = 0;
var valore;
for (valore of quantita) {
totale = totale + valore;
}
Ad ogni iterazione JavaScript assegna alla variabile valore
il contenuto di ciascun elemento dell'array.
Queste varianti del for
ci consentono di scrivere meno codice quando lavoriamo con gli array. C'è da tenere presente, però, che il for...of
fa parte delle specifiche di ECMAScript 6 e potrebbe non essere disponibile in engine JavaScript meno recenti.