Cicli

Le istruzioni di ripetizione ciclica permettono di eseguire ripetutamente un blocco di codice specifico utilizzando una serie di valori o di variabili. Adobe consiglia di racchiudere sempre il blocco di codice tra parentesi graffe ({}). Sebbene sia possibile omettere le parentesi se il blocco di codice contiene un'unica istruzione, questa abitudine non è consigliata per lo stesso motivo esposto per le istruzioni condizionali: incrementa la possibilità che istruzioni aggiunte in seguito vengano inavvertitamente escluse dal blocco di codice. Se, in un secondo momento, aggiungete un'istruzione da includere nel blocco di codice ma omettete di aggiungere anche le necessarie parentesi graffe, l'istruzione viene ignorata al momento dell'esecuzione del ciclo.

for

Il ciclo for permette di eseguire iterazioni su una variabile per verificare un intervallo di valori specifico. In un'istruzione for è necessario fornire tre espressioni: una variabile impostata su un valore iniziale, un'istruzione condizionale che determina quando il ciclo termina e un'espressione che cambia il valore della variabile a ogni ciclo. Il codice seguente, ad esempio, esegue cinque iterazioni. Il valore della variabile i inizia a 0 e termina a 4 e l'output è rappresentato dai numeri da 0 a 4, ciascuno su una riga separata.

var i:int; 
for (i = 0; i < 5; i++) 
{ 
    trace(i); 
}

for..in

Il ciclo for..in esegue un'iterazione sulle proprietà di un oggetto o sugli elementi di un array. Potete, ad esempio, ricorrere a un ciclo for..in per eseguire iterazioni sulle proprietà di un oggetto generico (le proprietà degli oggetti non vengono ordinate in base a criteri particolari, ma inserite in ordine casuale):

var myObj:Object = {x:20, y:30}; 
for (var i:String in myObj) 
{ 
    trace(i + ": " + myObj[i]); 
} 
// output: 
// x: 20 
// y: 30

È possibile anche eseguire iterazioni sugli elementi di un array:

var myArray:Array = ["one", "two", "three"]; 
for (var i:String in myArray) 
{ 
    trace(myArray[i]); 
} 
// output: 
// one 
// two 
// three

Non è invece possibile eseguire iterazioni sulle proprietà di un oggetto che è un'istanza di una classe chiusa (comprese le classi incorporate e le classi definite dall'utente), a meno che la classe non sia dinamica. Anche in quest'ultimo caso, comunque, è possibile eseguire iterazioni solo sulle proprietà aggiunte in modo dinamico.

for each..in

Il ciclo for each.. esegue un'iterazione sulle voci di una raccolta, che possono essere tag contenuti in un oggetto XML o XMLList, i valori delle proprietà di un oggetto o gli elementi di un array. Come mostrato nel seguente estratto di codice, potete, ad esempio, utilizzare un ciclo for each..in per eseguire iterazioni sulle proprietà di un oggetto generico, ma a differenza del ciclo for..in, la variabile di iterazione in un ciclo for each..in contiene il valore della proprietà anziché il nome della stessa:

var myObj:Object = {x:20, y:30}; 
for each (var num in myObj) 
{ 
    trace(num); 
} 
// output: 
// 20 
// 30

È possibile eseguire l'iterazione su un oggetto XML o XMLList, come mostra l'esempio seguente:

var myXML:XML = <users> 
    <fname>Jane</fname> 
    <fname>Susan</fname> 
    <fname>John</fname> 
</users>; 
 
for each (var item in myXML.fname) 
{ 
    trace(item); 
} 
/* output 
Jane 
Susan 
John 
*/

Potete anche eseguire iterazioni sugli elementi di un array, come nel codice seguente:

var myArray:Array = ["one", "two", "three"]; 
for each (var item in myArray) 
{ 
    trace(item); 
} 
// output: 
// one 
// two 
// three

Non è invece possibile eseguire iterazioni sulle proprietà degli oggetti che sono istanze di classi chiuse. Nel caso di classi dinamiche, non è possibile eseguire l'iterazione sulle proprietà fisse, ovvero le proprietà definite nella definizione della classe.

while

Il ciclo while è come un'istruzione if che viene ripetuta fintanto che la condizione è true. Ad esempio, il codice seguente produce lo stesso output dell'esempio di ciclo for:

var i:int = 0; 
while (i < 5) 
{ 
    trace(i); 
    i++; 
}

Il ciclo while presenta uno svantaggio rispetto al ciclo for: è più facile scrivere cicli infiniti. A differenza del ciclo for, l'esempio di codice del ciclo while viene compilato anche se si omette l'espressione che incrementa la variabile del contatore. Senza l'espressione che incrementa i, il ciclo diventa infinito.

do..while

Il ciclo do.. è un ciclo while che garantisce che il blocco di codice venga eseguito almeno una volta, perché la condizione viene verificata dopo l'esecuzione del blocco di codice. Il codice seguente mostra un semplice esempio di un ciclo do..while che genera un risultato anche se la condizione non è soddisfatta:

var i:int = 5; 
do 
{ 
    trace(i); 
    i++; 
} while (i < 5); 
// output: 5