Schleifen (Looping)



Mit Schleifenanweisungen können Sie einen bestimmten Codeblock mit einer Reihe von Werten oder Variablen wiederholt ausführen. Sie sollten den Codeblock in geschweifte Klammern ({}) setzen. Wenn der Codeblock nur eine Anweisung enthält, können Sie die geschweiften Klammern theoretisch auch weg lassen. Hiervon wird jedoch abgeraten, da dies, ähnlich wie bei Bedingungen, dazu führen kann, dass später hinzugefügte Anweisungen versehentlich aus dem Codeblock ausgeschlossen werden. Wenn Sie später eine Anweisung hinzufügen, die in den Codeblock aufgenommen werden soll, jedoch die notwendigen Klammern vergessen, wird die Anweisung nicht als Teil der Schleife ausgeführt.

for

Mit der for-Schleife können Sie eine Variable in einem bestimmten Wertebereich durchlaufen. Sie müssen drei Ausdrücke in einer for-Anweisung angeben: eine Variable, die auf einen Ausgangswert eingestellt ist, eine Bedingungsanweisung, die das Ende der Schleife bestimmt, und einen Ausdruck, der den Wert der Variablen bei jedem Durchlauf ändert. Der Code im folgenden Beispiel wird fünf Mal ausgeführt. Die Variable i hat am Anfang den Wert 0 und endet mit dem Wert 4. Die Ausgabe besteht aus den Zahlen 0 bis 4, die jeweils in einer separaten Zeile angezeigt werden.

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

for..in

Die for..in-Schleife durchläuft die Eigenschaften eines Objekts oder die Elemente eines Arrays. Sie können eine for..in-Schleife beispielsweise verwenden, um die Eigenschaften eines generischen Objekts zu durchlaufen (da für Objekteigenschaften keine feste Reihenfolge gilt, werden sie in willkürlicher Reihenfolge angezeigt):

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

Sie können auch die Elemente eines Arrays durchlaufen:

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

Es ist nicht möglich, die Eigenschaften eines Objekts zu durchlaufen, wenn dieses Objekt eine Instanz einer benutzerdefinierten Klasse ist, es sei denn, es handelt sich um eine dynamische Klasse. Selbst bei Instanzen von dynamischen Klassen sind Iterationen nur für dynamisch hinzugefügte Eigenschaften möglich.

for each..in

Die for each..in-Schleife durchläuft die Objekte einer Sammlung. Bei diesen Objekten kann es sich um Tags in einem XML- oder XMLList-Objekt, um die in Objekteigenschaften gespeicherten Werte oder um die Elemente eines Arrays handeln. Wie im folgenden Codeauszug zu sehen ist, können Sie eine for each..in-Schleife beispielsweise verwenden, um die Eigenschaften eines generischen Objekts zu durchlaufen. Im Gegensatz zur for..in-Schleife enthält die Iterationsvariable in einer for each..in-Schleife den in der Eigenschaft gespeicherten Wert anstelle des Eigenschaftsnamens:

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

Sie können ein XML- oder XMLList-Objekt durchlaufen. Dies wird im folgenden Code gezeigt:

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

Sie können auch die Elemente eines Arrays durchlaufen, wie das folgende Beispiel zeigt:

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

Die Eigenschaften eines Objekts, das eine Instanz einer versiegelten Klasse ist, können nicht durchlaufen werden. Auch bei Instanzen von dynamischen Klassen können Sie keine festen Eigenschaften durchlaufen, die als Teil der Klassendefinition definiert sind.

while

Die while-Schleife ähnelt einer if-Anweisung, da sie wiederholt wird, solange die Bedingung true ist. Im folgenden Codebeispiel wird die gleiche Ausgabe wie bei der for-Schleife erzeugt:

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

while-Schleifen haben im Gegensatz zu for-Schleifen den Nachteil, dass sie eher zu Endlosschleifen führen. Der Code einer for-Schleife wird nicht kompiliert, wenn der Ausdruck fehlt, mit dem die Zählervariable erhöht wird. Der Code einer while-Schleife wird jedoch auch ohne diesen Ausdruck kompiliert. Wenn der Ausdruck zum Erhöhen von i nicht vorhanden ist, entsteht eine Endlosschleife.

do..while

Die do..while-Schleife ist eine while-Schleife, die garantiert, dass ein Codeblock mindestens einmal ausgeführt wird, da die Bedingung erst nach dem Ausführen des Codeblocks überprüft wird. Das folgende Codebeispiel zeigt eine einfache do..while-Schleife, durch die eine Ausgabe generiert wird, obwohl die Bedingung nicht erfüllt ist:

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