Pętle

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