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
|
|
|