4.5 Schleifen
Eine Schleife läuft so lange, wie eine Bedingung erfüllt ist. Die Konsequenz: Sie können mit einer Schleife bestimmte Anweisungen beliebig oft wiederholen. Dieses Grundprinzip gilt für alle Schleifenarten in ActionScript, Unterschiede gibt es nur bei der Syntax.
In der Praxis können Sie beispielsweise eine Schleife einsetzen, um 20 Instanzen eines MovieClips zu erzeugen und zufällig auf der Bühne zu platzieren. Das ist natürlich nur eine von vielen Anwendungsmöglichkeiten.
for-Schleife
Die for-Schleife ist die komfortabelste aller Schleifen. Um sie zu verstehen, werfen Sie zuerst einen Blick auf ihre Syntax:
for (Startanweisung; Bedingung; Durchlaufanweisung) {
Anweisungen;
}
Chronologisch läuft die Schleife so ab:
- Zuerst wird die Startanweisung ausgeführt; dies geschieht nur einmal zu Beginn der Schleife.
- Anschließend wird die Bedingung überprüft.
- Ist diese erfüllt, werden die Anweisungen in den geschweiften Klammern einmal ausgeführt. Ist die Bedingung nicht erfüllt, wird die Schleife sofort verlassen.
- Nach den Anweisungen kommt die Durchlaufanweisung einmal zur Ausführung.
- Anschließend wird wieder die Bedingung überprüft.
- Ist diese erfüllt, werden die Anweisungen erneut ausgeführt und so weiter …
for-in-Schleife |
Die for-in-Schleife ist eine Abwandlung der for-Schleife und dient dazu, Objekte oder Arrays zu durchlaufen. Die Grundlagen lesen Sie im Abschnitt »Objekte«, das Zusammenspiel mit Arrays steht im Abschnitt »Arrays«. |
Abbildung 4.15 Der Ablauf einer for-Schleife
Erkennen Sie schon den Sinn hinter den einzelnen Elementen? Aus Startanweisung, Bedingung und Durchlaufanweisung lässt sich ein einfacher Zähler erzeugen:
for (var i:Number = 1; i < 15; i++) { trace(i); }
Die Variable i wird in der Startanweisung mit dem Wert 1 initialisiert.
Abbildung 4.16 Die Schleife gibt die Zahlen von 1 bis 14 aus.
Zählervariablen heißen oft i, j, k etc. Wenn Sie Schleifen ineinander verschachteln, müssen Sie unterschiedliche Zählervariablen verwenden. Stehen Schleifen aber hintereinander, reicht es, immer nur einen Variablennamen (meist i) einzusetzen und in jeder Schleife den Anfangswert zurückzusetzen. Bei Zählervariablen lässt man meistens den Datentyp als Suffix weg, da der Datentyp eindeutig Number ist.
while-Schleife
Die while-Schleife heißt oft »Mutter aller Schleifen«, da sie zum einen schon lange existiert und da sich zum anderen mit ihr verschiedene Schleifen nachbilden lassen. Ihre Syntax ist einfacher als die Syntax der for-Schleife:
while (Bedingung) {
Anweisungen;
}
Das einzige festgelegte Element ist die Überprüfung der Bedingung. Nur wenn sie erfüllt ist, führt der ActionScript-Interpreter die Anweisungen im Block (geschweifte Klammern) aus.
Abbildung 4.17 Bei der while-Schleife ist nur die Bedingung festgelegt.
Fehlerquellen |
Achten Sie genau auf Startwert und Bedingung für Ihre Zählervariable. Eine der möglichen Fehlerquellen: Die Schleife wird einmal zu wenig durchlaufen, weil in der Bedingung ein »Kleiner als« statt eines »Kleiner gleich« steht. |
Was geschieht aber, wenn die Bedingung immer, also vor jedem Schleifendurchlauf, zutrifft? Wir zeigen Ihnen einen solchen Fall – bitte testen Sie den Code nicht!
var i:Number = 1; while (i < 15) { trace(i); }
Hier handelt es sich um eine Endlosschleife. Da die Schleife nie endet, frisst sie Systemressourcen und führt im schlimmsten Fall zum Systemabsturz. Der Flash-Player besitzt für solche Fälle eine Sicherheitsbremse, die nach einer Weile eine Warnmeldung zeigt und erlaubt, die Endlosschleife abzubrechen.
Abbildung 4.18 Diese Fehlermeldung deutet auf eine Endlosschleife hin.
Um eine Endlosschleife zu vermeiden, benötigen Sie wie bei der for-Schleife für den Zähler eine Durchlaufanweisung. Da diese Anweisung bei while nicht in die runden Klammern gehört, fügen Sie sie einfach als letzte Anweisung in den Anweisungsblock ein:
var i:Number = 1; while (i < 15) { trace(i); i++; }
Auch hier stellt sich wieder die Frage, wann for und wann while sinnvoll ist. Pauschalaussagen sind schwierig: for ist etwas komfortabler und erfordert weniger Zeilencode; while kann allerdings genauso eingesetzt werden. Diese Schleife ist etwas flexibler, da Startanweisung und Durchlaufanweisung nicht vorgegeben sind. Schließlich und endlich ist die Wahl in den meisten Fällen Geschmacksache.
Abbildung 4.19 Sie sehen dieselbe Wirkung wie im letzten Abschnitt, nur dieses Mal mit while.
do-while-Schleife
Die do-while–Schleife funktioniert exakt wie die while–Schleife, außer… Sie sehen es bei einem Blick auf die Syntax:
do {
Anweisungen;
} while (Bedingung)
Die Bedingung wird erst nach dem Schleifendurchlauf geprüft. do steht quasi für »mach erst einmal«; gemeint ist damit die Schleife, die zuerst ihre Arbeit erledigen soll. Sie sehen dies in Abbildung 4.20.
Abbildung 4.20 do while führt zuerst die Anweisungen aus und prüft dann die Bedingung.
var i:Number = 20; do { trace(i); i++; } while (i < 15)
Abbildung 4.21 Meistens ungewollt: do while führt die Anweisung einmal aus, obwohl die Bedingung nicht erfüllt ist.
In diesem Fall wird der Wert 20 nur einmal ausgegeben. Das ist in den meisten Fällen nicht erwünscht; deswegen kommt die do-while-Schleife in der Praxis kaum zum Einsatz. Und wenn, dann möchte der Entwickler genau dieses »komische« Verhalten erzeugen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.