10.7 Schleifen-Konstrukte

10.7.1 for-Schleife

Dieses Konstrukt dient zur Formulierung von Schleifen, wenn die Anzahl der Durchläufe vor Eintritt in die Schleife berechnet werden kann.

Syntax

for <Zähler> := <Start> to <Ende> { step <Schrittweite> } do
  <Anweisungen>
endfor

Beim Schleifenstart bekommt <Zähler> den Wert <Start> zugewiesen. Nach jedem Schleifendurchlauf wird <Schrittweite> zu <Zähler> addiert. Wurde <Schrittweite> nicht angegeben, wird immer die Standardschrittweite 1 addiert. Die Schleife wird solange durchlaufen, bis <Zähler> größer als <Ende> ist. Bei jedem Schleifendurchlauf werden die <Anweisungen> ausgeführt, die auf den aktuellen Wert von <Zähler> zugreifen können. <Start>, <Ende> und <Schrittweite> müssen integer-Werte sein. <Zähler> muss integer-Werte annehmen können. <Start>, <Ende> und <Schrittweite> werden nur einmal vor dem ersten Schleifendurchlauf berechnet.

Beispiel

for Index := 1 to Window.childcount do
  print Window.child[Index];
endfor

Es gibt keine Möglichkeit, eine for-Schleife vorzeitig zu beenden.

Wenn bei for-Schleifen das Abbruchkriterium nicht erreichbar ist, wird die Schleife nicht ausgeführt.

Beispiel

for I := 1 to 10 step -1 do

10.7.2 foreach-Schleife

Dieses Konstrukt dient zur Formulierung von Schleifen, die über alle Elemente einer Sammlung gehen.

Syntax

foreach <Element> in <Ausdruck> do
  <Anweisungen>
endfor

Die Schleife bricht mit einem Fehler ab, wenn der <Ausdruck> keine Sammlung ist oder der Schleifenwert nicht dem <Element> zugewiesen werden kann. Der <Ausdruck> wird nur einmal Initial ausgewertet. Die Laufvariable <Element> darf innerhalb der <Anweisungen> verändert werden. Eine Änderung der Laufvariablen hat keinen Einfluss auf die Durchlaufzahl oder den Wert der Laufvariablen im nächsten Durchlauf.

Beispiel

dialog D
window Wi
{
  listbox Lb
  {
    .xauto 0;  .yauto 0;
  }
  on close { exit(); }
}

on dialog start
{
  variable list StationList:= ["ARD", "ZDF", "SWR3", ""];
  variable string Station;

  foreach Station in StationList do
    Lb.content[Lb.itemcount+1] := Station;
  endfor
}

10.7.3 while-Schleife

Dieses Konstrukt ist eine Wiederholungsanweisung, also eine Schleifenanweisung, bei der die Anzahl der Wiederholungen von einer Bedingung abhängig ist. Die Bedingung wird zu Beginn eines neuen Durchlaufes geprüft.

Syntax

while <Bedingung> do
  <Anweisungen>
endwhile

Vor jedem Schleifendurchlauf wird der Wert <Bedingung> berechnet. Er muss ein boolean-Wert sein. Ist er true, werden die <Anweisungen> ausgeführt und die Schleifen von vorne begonnen. Sobald der Wert false ist, wird die Schleife abgebrochen. Anders kann eine while-Schleife nicht beendet werden.

Beispiel

while (Index < Window.childcount) do
  print Window.child;
  Index := Index + 1;
endwhile