Instrukcje pętli umożliwiają wielokrotne wykonywanie określonego bloku kodu z różnymi wartościami lub zmiennymi. Firma Adobe zaleca, aby zawsze ujmować blok kodu w nawiasy sześcienne (
{}
). Mimo że nawiasy sześcienne można pominąć, jeśli kod zawiera tylko jedną instrukcję, nie zaleca się korzystania z tej możliwości. Powód jest ten sam, co w przypadku instrukcji warunkowych: brak nawiasów zwiększa ryzyko niezamierzonego wyłączenia z bloku kodu instrukcji dopisanych później. Jeśli później dodamy instrukcję, która powinna być uwzględniona w bloku, ale zapomnimy dodać potrzebne nawiasy, instrukcja nie zostanie wykonana w pętli.
for
Pętla
for
umożliwia iteracyjną zmianę wartości zmiennej w ramach określonego przedziału wartości W instrukcji
for
należy podać trzy wyrażenia: zmienną z przypisaną wartością początkową, instrukcję warunkową, która decyduje o zakończeniu pętli, oraz wyrażenie zmieniające wartość zmiennej w każdej iteracji. Poniższa przykładowa pętla jest wykonywana pięć razy. Zmienna
i
ma na początku wartość 0, a na końcu wartość 4; wynikiem wykonania pętli są liczby od 0 do 4 wyświetlone w osobnych wierszach.
var i:int;
for (i = 0; i < 5; i++)
{
trace(i);
}
for..in
Pętla
for..in
iteracyjnie przegląda właściwości obiektu lub elementy tablicy. Pętli
for..in
można użyć do iteracyjnego przeglądania właściwości obiektu ogólnego (jednak właściwości obiektu nie są przechowywane w żadnym z góry określonym porządku, dlatego mogą pojawiać się w pętli w pozornie przypadkowej kolejności):
var myObj:Object = {x:20, y:30};
for (var i:String in myObj)
{
trace(i + ": " + myObj[i]);
}
// output:
// x: 20
// y: 30
Możliwe jest także iteracyjne przeglądanie elementów tablicy:
var myArray:Array = ["one", "two", "three"];
for (var i:String in myArray)
{
trace(myArray[i]);
}
// output:
// one
// two
// three
Nie można natomiast przeprowadzić iteracji przez właściwości obiektu, jeśli jest to instancja klasy zapieczętowanej (zawiera wbudowane klasy oraz klasy zdefiniowane przez użytkownika). Możliwa jest tylko iteracja właściwości klasy dynamicznej. W przypadku instancji klas dynamicznych iteracja jest możliwa tylko za pośrednictwem właściwości dodawanych dynamicznie.
for each..in
Pętla
for each..in
iteracyjnie przegląda elementy kolekcji, które mogą być znacznikami w obiekcie XML lub XMLList, wartościami zapisanymi we właściwościach obiektu lub elementami tablicy. Poniższy fragment kodu ilustruje możliwość zastosowania pętli
for each..in
do iteracyjnego przeglądania właściwości obiektu ogólnego, jednak, inaczej niż w pętli
for..in
, zmienna sterująca pętli
for each..in
zawiera wartość przechowywaną we właściwości, a nie nazwę właściwości:
var myObj:Object = {x:20, y:30};
for each (var num in myObj)
{
trace(num);
}
// output:
// 20
// 30
Możliwe jest iteracyjne przeglądanie obiektu XML lub XMLList, co ilustruje następujący przykład:
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
*/
Można także iteracyjnie przeglądać elementy tablicy, co zilustrowano poniżej:
var myArray:Array = ["one", "two", "three"];
for each (var item in myArray)
{
trace(item);
}
// output:
// one
// two
// three
Nie jest możliwe iteracyjne przeglądanie właściwości obiektu będącego instancją klasy zapieczętowanej. Nawet w instancjach klas dynamicznych nie jest możliwe iteracyjne przeglądanie właściwości ustalonych, czyli zdefiniowanych w ramach definicji klasy.
while
Pętla
while
działa jak instrukcja
if
powtarzana tak długo, jak długo warunek jest spełniony (
true
). Poniższy przykładowy kod generuje te same wyniki, co wcześniejszy przykład z pętlą
for
:
var i:int = 0;
while (i < 5)
{
trace(i);
i++;
}
Pewną wadą pętli
while
w porównaniu z pętlą
for
jest większe ryzyko niezamierzonego stworzenia pętli nieskończonej
while
. Przykład z pętlą
for
nie zostałby skompilowany bezbłędnie, gdybyśmy pominęli wyrażenie inkrementujące zmienną sterującą, natomiast w przykładzie z pętlą
while
pominięcie tej operacji nie spowoduje błędu kompilatora. Bez wyrażenia inkrementującego
i
pętla jest wykonywana w nieskończoność.
do..while
Pętla
do..while
jest to pętla
while
, w której blok kodu zostanie zawsze wykonany co najmniej jeden raz, ponieważ warunek jest sprawdzany po wykonaniu bloku kodu. Poniżej przedstawiono prosty przykład pętli
do..while
, która wyświetla wynik nawet jeśli warunek nie jest spełniony:
var i:int = 5;
do
{
trace(i);
i++;
} while (i < 5);
// output: 5
|
|
|