Looping

Med slingprogramsatser kör du ett speciellt kodblock upprepade gånger med hjälp av en serie värden eller variabler. Du bör alltid omsluta kodblocket med klammerparenteser ({}). Även om du kan utesluta klammerparenteser om kodblocket bara innehåller en programsats bör du inte göra det av samma orsak som du inte gör det i villkorliga programsatser: det ökar risken för att programsatser som läggs till senare av misstag utesluts från kodblocket. Om du senare lägger till en programsats i kodblocket, men glömmer att lägga till de nödvändiga klammerparenteserna, körs programsatsen inte som en del av slingan.

for

Med slingan for kan du iterera genom en variabel efter ett visst värdeintervall. Du måste ange tre uttryck för en for-programsats: en variabel som är inställd på ett initialvärde, en villkorlig programsats som bestämmer när repeteringen avslutas och ett uttryck som ändrar värdet för variabeln med varje repetition. Följande kod repeteras fem gånger. Värdet för variabeln i startar vid 0 och slutar vid 4, och utdata blir siffrorna 0 till 4 på fyra olika rader.

var i:int; 
for (i = 0; i < 5; i++) 
{ 
    trace(i); 
}

for..in

Slingan for..in itereras från ett objekts egenskaper eller en arrays element. Du kan till exempel använda en for..in-slinga för att iterera genom egenskaperna för ett generiskt objekt (objektegenskaper ligger inte i någon särskilt ordning, vilket gör att de visas i slumpvis ordning):

var myObj:Object = {x:20, y:30}; 
for (var i:String in myObj) 
{ 
    trace(i + ": " + myObj[i]); 
} 
// output: 
// x: 20 
// y: 30

Du kan även iterera igenom elementen i en array:

var myArray:Array = ["one", "two", "three"]; 
for (var i:String in myArray) 
{ 
    trace(myArray[i]); 
} 
// output: 
// one 
// two 
// three

Du kan dock inte iterera genom egenskaperna för ett objekt om det är en instans av en fast klass (inklusive inbyggda klasser och användardefinierade klasser). Du kan bara iterera genom egenskaperna för en dynamisk klass. Och även för instanser av dynamiska klasser kan du bara iterera genom egenskaper som läggs till dynamiskt.

for each..in

Slingan for each..in itererar genom en samlings objekt som kan vara taggar i ett XML- eller XMLList-objekt, värden för objektegenskaper eller element i en array. Som visas i följande utdrag kan du använda en for each..in-slinga för att iterera genom egenskaper för ett generiskt objekt, men i motsats till slingan for..in innehåller iteratorvariabeln i en for each..in-slinga värdet för egenskapen i stället för namnet på egenskapen:

var myObj:Object = {x:20, y:30}; 
for each (var num in myObj) 
{ 
    trace(num); 
} 
// output: 
// 20 
// 30

Du kan iterera genom ett XML- eller XMLList-objekt, vilket visas i följande exempel:

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

Du kan även iterera genom elementen i en array, vilket visas i följande exempel:

var myArray:Array = ["one", "two", "three"]; 
for each (var item in myArray) 
{ 
    trace(item); 
} 
// output: 
// one 
// two 
// three

Du kan inte iterera genom egenskaperna för ett objekt om objektet är en instans av en fast klass. Inte ens för instanser av dynamiska klasser kan du iterera genom fasta egenskaper som har definierats som en del av klassdefinitionen.

while

Slingan while är som en if-programsats som upprepas så länge som villkoret är true. Följande kod skapar samma utdata som exemplet med slingan for:

var i:int = 0; 
while (i < 5) 
{ 
    trace(i); 
    i++; 
}

En nackdel med att använda en while-slinga i stället för en for-slinga är att det är lättare att råka skriva oändliga slingor med while-slingor. Exempelkoden för for-slingan kompileras inte om du utelämnar uttrycket som ökar räknarvariabeln, men exemplet med while-slingan kompilerar om du utelämnar det steget. Utan uttrycket som ökar i blir slingan oändlig.

do..while

Slingan do..while är en while-slinga som garanterar att kodblocket körs minst en gång, eftersom villkoret kontrolleras när kodblocket har körts. Följande kod visar ett enkelt exempel på en do..while-slinga som ger utdata även om villkoret inte uppfylls:

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