12. Cicli

I cicli sono costrutti del linguaggio particolari, che ci consentono di ripetere un determinato blocco di codice per un numero noto di volte o finchè una specifica condizione risulta vera.

Sono spesso usati per scorrere gli elementi di un array o le proprietà di un oggetto, consentendo quindi di sfruttare appieno le potenzialità di questi tipi di dato.

ActionScript 3 ci mette a disposizione ben 5 cicli :

  • for - Questo ciclo è utilizzato principalmente per gestire iterazioni che richiedano l'uso di un indice intero, come ad esempio lo scorrimento di un array (non associativo)
  • for in - Utilizzato per effettuare un'iterazione per ogni proprietà di un oggetto o di un array, memorizzando nella variabile d'iterazione il nome della proprietà (oggetto) o della chiave / indice (array)
  • for each in - Analogo al ciclo for in ma nella variabile d'iterazione memorizzerà il valore contenuto nella proprietà (oggetto) o nella chiave / indice (array)
  • while - Esegue un'iterazione finchè la condizione specificata risulta vera
  • do while - Analogo a while, ma prima effettua l'iterazione poi controlla se la condizione specificata è vera

Ciclo for

Il ciclo for prende tre argomenti, tutti facoltativi.
Omettendo la condizione sarà come specificarne una sempre vera, dando vita ad un ciclo infinito.

Vediamo quali sono questi tre parametri e in cosa consistono :

for (assegnazione; condizione; successivo)
{
	// codice da ripetere
}
  • Assegnazione - Questo parametro è un'istruzione di assegnazione che verrà eseguita subito di cominciare le iterazioni
  • Condizione - Il ciclo sarà interrotto quando questo parametro produrrà il valore booleano false (condizione non vera)
  • Successivo - Il parametro in questione è un'istruzione di assegnazione che verrà eseguita alla fine di ogni iterazione

Esempio for

var output:String = new String();
var frutti:Array = new Array("Mela", "Pera", "Banana");

for (var i:int = 0; i < frutti.length; i++)
{
	output += frutti[i];

	if (i + 1 < frutti.length)
		output += " - ";
}

trace(output); // Output : "Mela - Pera - Banana"


Ciclo for in

Il ciclo for in viene usato per iterare automaticamente array e oggetti, prendendo due argomenti separati dalla parola chiave in.

for (iteratore in oggetto)
{
	// codice da ripetere
}
  • Iteratore - Questo parametro viene chiamato variabile d'iterazione è conterra l'indice o la chiave se iteriamo un array o il nome della proprietà se iteriamo un oggetto
  • Oggetto - L'oggetto o l'array da iterare

Esempio for in

var frutti:Array = new Array("Mela", "Pera", "Banana");

for (var i in frutti)
	trace((i + 1) + ". " + frutti[i]);

Output :

1. Mela
2. Pera
3. Banana


Ciclo for each in

for each in differisce dal ciclo for in per come gestisce la variabile d'iterazione, memorizzando in essa direttamente il valore dell'elemento, se iteriamo un array, o il valore della proprietà se iteriamo un oggetto.

for each (iteratore in oggetto)
{
	// codice da ripetere
}

Esempio for each in

var frutti:Array = new Array("Mela", "Pera", "Banana");

for each (var valore in frutti)
	trace(valore);

Output :

Mela
Pera
Banana


Ciclo while

Questo ciclo prende un solo parametro, una condizione che interrompera le iterazioni qualora risultasse falsa.

while (condizione)
{
	// codice da ripetere
}

Esempio while

var i:int = 0;
var frutti:Array = new Array("Mela", "Pera", "Banana");

while (i < frutti.length)
	trace((++i) + ". " + frutti[i - 1]);

Output :

1. Mela
2. Pera
3. Banana


Ciclo do while

do while differisce dal ciclo while perchè prima esegue il codice al suo interno, e dopo controlla se la condizione è vera.

do
{
	// codice da ripetere
} while (condizione)

Esempio do while

var i:int = 3;

do trace(i++);
while (i < 3)

Output :

3


Break e Continue

Prima di chiudere il capitolo analizziamo altre due istruzioni particolari, che ci consentiranno un maggiore controllo sui cicli : break e continue.

Richiamando l'istruzione break all'interno di un ciclo, interromperemo immediatamente quest ultimo.

Richiamando l'istruzione continue invece, forzeremo il ciclo a procedere all'iterazione successiva senza eseguire le istruzioni che seguono il continue.

Esempio break

var iterazioni:int = 10;

for (var i:int = 0; i < iterazioni; i++)
{
	if ((iterazioni / 2) == i) break; // Blocca il ciclo a metà
	trace(i);
}

Output :

0
1
2
3
4

Esempio continue

for (var i:int = 0; i < 10; i++)
{
	if (i % 2)
	{
		trace(i + " è dispari");
		continue;
	}

	trace(i + " è pari");
}

Output :

0 è pari
1 è dispari
2 è pari
3 è dispari
4 è pari
5 è dispari
6 è pari
7 è dispari
8 è pari
9 è dispari

Per capire meglio il funzionamento provate ad eseguire l'esempio soprastante omettendo l'istruzione continue.