Ripetizione ciclica

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 ({}). Benché sia possibile omettere le parentesi graffe se il blocco di codice contiene una sola istruzione, questa pratica non è consigliata per lo stesso motivo per cui non è consigliata per le istruzioni condizionali: aumenta la probabilità che le istruzioni aggiunte in futuro vengano inavvertitamente escluse dal blocco di codice. Se, in un secondo momento, si aggiunge un'istruzione da includere nel blocco di codice ma si dimentica di aggiungere anche le necessarie parentesi graffe, l'istruzione verrà ignorata al momento dell'esecuzione del ciclo.

Sezioni

for
for..in
for each..in
while
do..while

for

Il ciclo for permette di eseguire iterazioni su una variabile per verificare un intervallo di valori specifico. A 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. È possibile, 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:
// uno
// due
// tre

Non è invece possibile eseguire iterazioni sulle proprietà degli oggetti che sono istanze di 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..in 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. Ad esempio, come illustra il codice seguente, è possibile utilizzare un ciclo for each..in per eseguire un'iterazione sulle proprietà di un oggetto generico, tuttavia, a differenza di quanto avviene con il ciclo for..in, la variabile di iterazione di un ciclo for each..in contiene il valore della proprietà anziché il suo nome:

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

È anche possibile 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:
// uno
// due
// tre

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..while è 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 esempio semplice di un ciclo do..while che genera un output anche se la condizione non è soddisfatta:

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

Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000052.html