Thursday, August 23, 2012

Core JavaScript – Imperative Programmierung Teil 2 – Kontrollstrukturen und Schleifen


Cover-klein in Core JavaScript – Imperative Programmierung Teil 2 - Kontrollstrukturen und Schleifen  - Ajaxer

Kontrollstrukturen

Kontrollstrukturen und Schleifen sind – neben Funktionen und Prozeduren – die wesentlichen Merkmale der strukturierten Programmierung. Wie auch Java und C bietet JavaScript die bekannten Kontrollstrukturen wie die if-else-Anweisung, die mit Fortran bereits in den 50er-Jahren erfunden wurde.

If-Anweisung

Wenn der Ausdruck in der if-Anweisung wahr ist, dann wird der if-Block ausgeführt, ansonsten der else-Block.
if (x === y) {
 // Then-Block
 print("x ist y");
} else {
 // Else-Block
 print("x ist ungleich y");
}

Switch-Anweisung

Mehrfachverzweigungen werden durch die switch-Anweisung eingeleitet. Die switch-Anweisung kann eine beliebige Auswahl von bedingten Auswahlblöcken enthalten.
switch (x) {
 case 3: {
  print("x ist 3");
  break; // ansonsten wird default auch abgearbeitet
 }
 default: {
  print("Default");
 }
}
Welcher Block aufgerufen wird, hängt vom Wert des Auswahlausdrucks ab (hier: x). Der Auswahlausdruck kann eine Zahl oder ein String sein bzw. eine Zahl oder einen String erzeugen. Es werden alle Auswahlausdrücke von oben nach unten abgearbeitet. Um diese Abarbeitung zu unterbrechen, muss man die break-Anweisung verwenden. Wie auch in anderen Sprachen, die eine switch-case-Anweisung kennen, ist es hilfreich, das Fehlen der break-Anweisung zu kommentieren, da nachfolgende Entwickler sonst vermuten könnten, dass die break-Anweisung vergessen wurde. Trifft kein Auswahlausdruck, so wird die optionale default-Anweisung ausgeführt.

Schleifen

Schleifen sind eine Art von Steuerstrukturen, die verwendet werden, um gänzlich auf Sprunganweisungen zu verzichten. Sie wurden mit der Programmiersprache Pascal in den 70er-Jahren eingeführt. JavaScript kennt die üblichen Schleifen: die while-Schleife, die do-while-Schleife und die for-Anweisung. Die aus Pascal bekannte repeat-until-Schleife kennt JavaScript nicht, sie lässt sich allerdings durch die do-while-Schleife äquivalent nachbilden.

While-Schleife

In der while-Schleife wird der Block der Schleife so lange ausgeführt, wie die Schleifenbedingung wahr ist. Die Schleifenbedingung wird ausgewertet, bevor der Block der Schleife selbst ausgeführt wird.
var x = 0;
while (x < 5) {
 print(x); // 0, 1, 2, 3, 4
 x++;
}

Do-While-Schleife

Die do-while-Anweisung gleicht der while-Anweisung, nur dass die Schleifenbedingung ausgewertet wird, nachdem der Block der Schleife selbst ausgeführt wurde.
var x = 0;
do {
 print(x); // 0, 1, 2, 3, 4, …
 x++;
} while (x < 10);

For-Schleife

Die am häufigsten verwendete und älteste Schleifenform ist aber sicherlich die for-Schleife. Sie wurde bereits mit Algol in den 60er-Jahren eingeführt. JavaScript kennt, wie die meisten modernen Programmiersprachen, gleich mehrere Formen der For-Schleife.
Die gewöhnliche Form der for-Anweisung hat drei Klauseln: die Schleifeninitialisierung, die Schleifenbedingung und der finale Ausdruck. Zuerst wird die Schleife initialisiert. Dann wird die Schleifenbedingung ausgewertet. Wenn diese wahr ist, dann wird der Schleifenblock ausgeführt. Sowohl die Initialisierung als auch die Schleifenbedingung sind optional ist. Bei nicht existierender Schleifenbedingung wird von einer wahren Schleifenbedingung ausgegangen. Nach der Ausführung des Blocks wird der finale Ausdruck ausgewertet. Dieser ist in der Regel ein Inkrement. Auch der finale Ausdruck ist optional.
for (var i = 0, j = 100; i < 100; i++, j--) {
 print(i);
 print(j);
};
Die zweite Form der for-Anweisung (for-in-Anweisung) iteriert über Eigenschaftsnamen eines Objekts. Die for-in-Anweisung iteriert nicht über eingebaute Objekteigenschaften, sondern nur über selbst definierte Objekteigenschaften, auch die, die eingebaute Eigenschaften überschreiben. Die Reihenfolge, in der über die Eigenschaften iteriert wird, ist nicht festgelegt. Daher kann nicht von einer festen Reihenfolge ausgegangen werden.
Veränderung von Eigenschaften in einer Schleife
Wenn die Eigenschaften in der Schleife hinzugefügt wurden, dann kann man sich nicht darauf verlassen, dass diese Eigenschaften in der Iteration berücksichtigt werden. Daher sollte das Objekt in der Schleife nicht verändert werden.
var foobar = {"foo": "hello", "bar": "world"};
for (var i in foobar) {
 print (i + " ist " + foobar[i]);
}
Die for-in-Anweisung sollte nicht verwendet werden, um über ein Array bzw. ein Objekt, das einem Array ähnelt, zu iterieren, da so auch über alle Eigenschaften des Arrays und nicht nur über die Inidizes iteriert wird. Man sollte für Arrays bzw. array-ähnliche Objekte stattdessen die gewöhnliche Form der for-Anweisung mit einem Schleifenzähler verwenden.

Sprunganweisungen

Die Programmiersprache C führte 1973 die Möglichkeit ein, Schleifen durch eine Sprunganweisung abzubrechen. Auch in JavaScript lassen sich Schleifen durch die break-Sprunganweisung vorzeitig beenden. Durch die continue-Sprunganweisung lässt sich die aktuelle Iteration abbrechen, die Schleife wird dann mit der nächsten Iteration fortgeführt. Wenn mehrere Schleifen ineinander geschachtelt sind, kann zudem über die label-Anweisung festlegt werden, welche Schleife durch die break-Anweisung beendet bzw. welche Schleife durch die continue-Anweisung fortgeführt werden soll.
outerloop: for (var x = 0; x < 100; x ++) {
 innerloop: for (var y = 0; y < 100; y++) {
  print (x + " : " + y);
  if (y > 10) break outerloop;
 }
}
Dies ist ein Crosspost von Ajaxer.de.