Met lusinstructies kunt u een specifiek codeblok herhaaldelijk uitvoeren met een reeks waarden of variabelen. Adobe geeft de aanbeveling dat u het codeblok altijd tussen accolades (
{}
) plaatst. U kunt de accolades weglaten als het codeblok maar één instructie bevat, maar dit wordt niet aanbevolen (om dezelfde reden als voor voorwaardelijke instructies): de toenemende kans dat later toegevoegde instructies ongewild worden buitengesloten van het codeblok. Als u later een instructie toevoegt die u in het codeblok wilt opnemen maar vergeet accolades te plaatsen, wordt de instructie niet als onderdeel van de lus uitgevoerd.
for
Met de lus
for
kunt u een variabele doorlopen voor een opgegeven reeks waarden. U moet drie expressies in een instructie
for
opgeven: een variabele die is ingesteld op een beginwaarde, een voorwaardelijke instructie die bepaalt wanneer de herhalingen eindigen en een expressie die bij elke lus de waarde wijzigt van een variabele. De volgende code wordt bijvoorbeeld vijf keer herhaald: De waarde van de variabele
i
begint bij 0 en eindigt bij 4. De uitvoer zijn de getallen 0 tot en met 4, die elk in een afzonderlijke regel worden weergegeven.
var i:int;
for (i = 0; i < 5; i++)
{
trace(i);
}
for..in
Met de lus
for..in
doorloopt u de eigenschappen van een object, of de elementen van een array. U kunt bijvoorbeeld een lus
for..in
gebruiken om de eigenschappen van een algemeen object te doorlopen (objecteigenschappen worden niet in een bepaalde volgorde bewaard, zodat eigenschappen in schijnbaar willekeurige volgorde worden weergegeven):
var myObj:Object = {x:20, y:30};
for (var i:String in myObj)
{
trace(i + ": " + myObj[i]);
}
// output:
// x: 20
// y: 30
U kunt ook de elementen van een array doorlopen:
var myArray:Array = ["one", "two", "three"];
for (var i:String in myArray)
{
trace(myArray[i]);
}
// output:
// one
// two
// three
U kunt de eigenschappen van een object niet doorlopen als dit een instantie van een verzegelde klasse is (inclusief ingebouwde klassen en door de gebruiker gedefinieerde klassen). U kunt alleen eigenschappen van een dynamische klasse doorlopen. Zelfs bij instanties van dynamische klassen, kunt u alleen eigenschappen doorlopen die dynamisch zijn toegevoegd.
for each..in
Met de lus
for each..in
doorloopt u de items van een verzameling. Dit kunnen tags in een object XML of XMLList zijn, de waarden van objecteigenschappen of de elementen van een array. Het volgende voorbeeldfragment laat zien dat u met een lus
for each..in
de eigenschappen van een algemeen object kunt doorlopen. Anders dan bij de lus
for..in
bevat de variabele voor de iterator in een lus
for each..in
echter de waarde van de eigenschap in plaats van de naam van de eigenschap:
var myObj:Object = {x:20, y:30};
for each (var num in myObj)
{
trace(num);
}
// output:
// 20
// 30
U kunt een object XML of XMLList doorlopen, zoals in het volgende voorbeeld wordt getoond:
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
*/
U kunt ook de elementen van een array doorlopen, zoals dit voorbeeld laat zien:
var myArray:Array = ["one", "two", "three"];
for each (var item in myArray)
{
trace(item);
}
// output:
// one
// two
// three
U kunt niet de eigenschappen van een object doorlopen wanneer het object een instantie van een verzegelde klasse is. Zelfs voor instanties van dynamische klassen kunt u vaste eigenschappen (eigenschappen die zijn gedefinieerd als onderdeel van de klassendefinitie) niet doorlopen.
while
De lus
while
lijkt op een instructie
if
die zich herhaalt zolang de voorwaarde
true
is. De volgende code levert bijvoorbeeld hetzelfde resultaat op als het voorbeeld met de lus
for
:
var i:int = 0;
while (i < 5)
{
trace(i);
i++;
}
Het gebruik van een lus
while
in plaats van een lus
for
heeft als nadeel dat met de lus
while
heel makkelijk oneindige lussen kunnen worden gemaakt. Het codevoorbeeld van de lus
for
wordt niet gecompileerd als u de expressie weglaat die de tellervariabele verhoogt, maar de voorbeeldlus
while
wordt wel gecompileerd als u die stap weglaat. Zonder het gebruik van de expressie die
i
verhoogt, wordt de lus een oneindige lus.
do..while
De lus
do..while
is een lus
while
die garandeert dat het codeblok minstens één keer wordt uitgevoerd, omdat de voorwaarde wordt gecontroleerd nadat het codeblok is uitgevoerd. De volgende code is een eenvoudig voorbeeld van een lus
do..while
die zelfs uitvoer genereert wanneer niet aan de voorwaarde is voldaan:
var i:int = 5;
do
{
trace(i);
i++;
} while (i < 5);
// output: 5
|
|
|