Chi ha usato Flash4 si ricorderà sicuramente il problema dei loop. Non
esistevano istruzioni dedicate, e così bisognava arrangiarsi giocando con i
frame per la ripetizione.
In Flash5 però questo problema è superato. Abbiamo a disposizione una serie di
istruzioni per il loop molto vasta.
while e do...while
L'azione while
necessita di un'espressione e, se questa è vera, esegue lo script compreso tra le parentesi graffe:
i = 0;
while (i < 10) {
i++;
logo.duplicateMovieClip("logo" + i, i);
}
In questo caso, l'azione viene eseguita per 10 volte.
Tramite l'azione do...while
invece, il controllo viene eseguito alla fine dello script:
i = 0;
do {
i++;
logo.duplicateMovieClip("logo" + i, i);
} while (i < 10)
Anche in questo caso lo script viene eseguito per 10 volte. Ma allora dov'è
sta la differenza tra le due istruzioni? La differenza sostanziale sta nel fatto
che, nel secondo esempio lo script viene eseguito almeno una volta, mentre nel primo no, in quanto la condizione viene verificata all'inizio del loop.
for e for...in
Nell'istruzione for
la variabile di loop (i generalmente) viene integrata negli argomenti dell'istruzione. La sintassi per l'istruzione è:
for
(inizializzazione; condizione; passaggio) {
...
}
Dove in inizializzazione viene inserita la variabile contatore con il suo valore iniziale; in condizione la condizione per cui il loop deve essere eseguito; infine in passaggio l'operazione da eseguire ad ogni loop.
In pratica, gli esempi precedenti vengono tradotti in:
for (i = 0; i < 10; i++) {
logo.duplicateMovieClip("logo" + i, i);
}
L'istruzione for..in
permette un ciclo tra gli elementi secondari di un oggetto (o movieclip).
Ecco un esempio:
//Inizializzo l'oggetto "utenti"
utenti = { nome:'Paolo', cognome:'Rossi', citta:'Rimini'};
//Loop per le sue proprietà
for (propertyName in utenti) {
trace (propertyName + ": " + utenti[propertyName];
}
Questo script genera nella finestra di Output questo testo:
nome: Paolo
cognome: Rossi
citta: Rimini
Il loop quindi, è stato eseguito per ogni proprietà dell'oggetto utenti.
break e continue
Le istruzioni viste finora mettono a disposizione altre due azioni (break
) che permettono di gestire l'uscita o il "salto" del loop. Mi spiego..
e continue
Utilizzando l'azione break
all'interno di un loop, questa genera l'uscita dal loop stesso. In questo esempio:
while (i < 10) {
i++;
//Verifico se la password è corretta
if (eval("password" + i) == "flash") {
break;
}
}
la password viene verificata per 10 volte. Se all'interno del loop, una delle variabili passwordn è uguale a "flash",
viene eseguito break
che termina il loop.
Con l'azione continue
invece, il risultato cambia a seconda del loop usato:
- while = il loop viene interrotto e rimandato alla condizione (in alto);
- do...while = il loop viene interrotto e rimandato alla condizione (in basso);
- for = il loop viene interrotto e rimandato alla condizione iniziale;
- for..in = il loop viene interrotto e rimandato all'inizio del ciclo per elaborare il successivo valore.