back to top

I cicli in Javascript: for, while e do-while

Per una serie di motivi che scopriremo nel corso di questa lezione, nonchè nelle successive, può nascere l’esigenza di dover ripetere una serie di istruzioni un determinato numero di volte, o finchè non si verifichi una data condizione. In tali circostanze è necessario ricorrere alle iterazioni o, più comunemente, ai cicli.

Javascript supporta diverse strutture iterative. Vediamole una ad una cercando di illustrarne il funzionamento anche facendo ricorso ad esempi pratici di utilizzo.

Il ciclo for()

Un ciclo for() serve a ripetere una serie di istruzioni un determinato numero determinato di volte. Per definire un ciclo for() si imposta:

  • una variabile contatore a cui si assegna un valore di partenza arbitrario (solitamente 0);
  • la condizione di terminazione (cioè un valore della variabile contatore che, una volta raggiunto, blocca il ciclo);
  • ed uno step (cioè l’incremento – o decremento – da applicare alla variabile contatore ad ogni passaggio del ciclo).

La dichiarazione della variabile contatore è opzionale, ma le buone norme di programmazione gradiscono che venga dichiarata.

Vediamo un esempio:

var i;
for (i=0; i<3; i++) {
  /*
  istruzioni che verranno ripetute 3 volte
  */
}

Come potete vedere abbiamo definito una variabile "i" che svolge il ruolo di contatore. All’interno delle parentesi tonde che seguono a for abbiamo definito il valore di partenza (i=0), la condizione che termina il ciclo (i<3) ed il nostro step (i++). In pratica for eseguirà le istruzioni contenute tra le parentesi graffe per tre volte in quanto al primo passaggio "i" avrà valore 0, al secondo 1, al terzo 2 ed a questo punto si stopperà in quanto la condizione di terminazione ci dice che il ciclo dovrà continuare sino a quanto "i" è minore di 3.

Più avanti, nel corso di questa guida, ritroveremo i cicli for() nella lezione dedicata agli array dove assumono un ruolo determinante nell’esplorazione del contenuto del vettore.

Il ciclo while()

A differenza di for(), il ciclo while() non prevede l’utilizzo di alcun contatore ma semplicemente l’indicazione di una condizione di terminazione: il ciclo terminerà non appena la condizione impostata si realizza. La sintassi è la seguente:

while (condizione) {
  istruzioni;
}

Vediamo un esempio banale:

var i = 0;
while (i < 10) {
  document.write('Conto: ' + i);
  i++;
}

che equivale a:

var i;
for (i=0; i<10; i++) {
  document.write('Conto: ' + i);
}

Nell’esempio qui sopra, come in for(), il ciclo è determinato da una variabile numerica, in realtà nulla vieta di impostare un ciclo while() che utilizza come condizione un altro tipo di variabile come, ad esempio, un valore booleano.

Il ciclo do while()

La struttura do while() è una variante di while(). La differenza tra le due sintassi consiste nel fatto che il controllo della condizione avviene dopo l’esecuzione dell’istruzione e non prima; la differenza, da un punto di vista pratico, è che l’istruzione viene eseguita sempre almeno una volta. Questa la sintassi:

do {
  istruzioni;
}
while (condizione);

Vediamo un esempio pratico:

var i = 0;
do {
  document.write('Conto: ' + i);
  i++;
}
while (i < 10);

Attenzione ai loop!

In chiusura di questa lezione dedicata i cicli ritengo doveroso un avvertimento: quando impostate un ciclo abbiate sempre cura di impostare con attenzione la condizione conclusiva che deve SEMPRE verificarsi. Ricordatevi, infatti, che se la condizione non si realizza mai… il ciclo continua all’infinito (cosidetto loop). Da un punto di vista pratico un loop comporta un esaurimento delle risorse del client ed un blocco del browser, quindi si tratta di una situazione che non deve mai potersi verificare!

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).