REXX: Schleifen

Die universelle SchleifeBearbeiten

Im Gegensatz zu anderen Programmiersprachen beginnen bei REXX alle Schleifen mit do. Die Gestaltung dieser do-Schleife kann sehr vielfältig sein.

Ein Block von AnweisungenBearbeiten

Wenn man eine feste Folge von Anweisungen braucht (z. B. für den then- oder else-Teil einer bedingten Anweisung), dann lassen sie sich diese zu einem do-end-Block zusammenfassen:

do
   Anweisung1
   Anweisung2
   Anweisung3
   .
   .
   .
   AnweisungN
end

Begrenzte Anzahl von WiederholungenBearbeiten

Soll eine Schleife eine fest vorgegebene Anzahl durchlaufen werden, dann kann man hinter dem do einen Ausdruck angeben, der die Anzahl der Wiederholungen bestimmt (Beispiel):

do 5
   say "Hallo"
end

Es wird fünfmal "Hallo" ausgegeben

ZählschleifeBearbeiten

do index=start to ende by schrittweite
   say index
end

Die Zählvariable darf nach dem abschließenden end wiederholt werden; stimmt die hier angegebene Variable nicht, so wird ein Syntaxfehler ausgelöst:

do index=start to ende by schrittweite
   say index
end index

Dies ist eine gute Hilfe, um in verschachtelten Schleifen den Überblick zu bewahren.

While-SchleifeBearbeiten

Die While-Schleife ist eine abweisende Wiederholung: Wenn der logische Ausdruck zu Beginn 0 ist, werden die enthaltenen Anweisungen überhaupt nicht ausgeführt. (Logische Ausdrücke müssen in Rexx immer den exakten Wert 0 oder 1 ergeben, sonst tritt ein Syntaxfehler auf.)

i=0
do while Bedingung
   i=i+1
   say i
end

Until-SchleifeBearbeiten

Hier wird eine Abbruchbedingung verwendet; wenn diese 1 ergibt, wird die Ausführung der Schleife abgebrochen. Da die Bedingung erst am Schleifenende abgefragt wird, werden die enthaltenen Anweisungen mindestens einmal ausgeführt:

i=11
do until Bedingung
   i=i-1
   say i
end


Endlosschleife (mit optionaler Abbruchbedingung)Bearbeiten

do forever
   Anweisung...
   if Abbruchbedingung then leave
end

Insbesondere für Endlosschleifen bietet sich auch der Abbruch per Ausnahmebehandlung an:

signal on halt
do forever
   Anweisung...
end
halt:
   say 'abgebrochen.'

iterate und leaveBearbeiten

Zur Verwendung in Schleifen gibt es die speziellen Sprunganweisungen iterate und leave. Beispiel:

do index=1
   if index == 3 then
      iterate index
   if index > 5 then
      leave
   say index
end index

Dabei springt iterate zum Schleifenanfang (vergleichbar dem continue anderer Programmiersprachen), während leave die Schleife verlässt (vergleichbar break). Die Angabe der Zählvariable ist wieder optional; sie ermöglicht außerdem die Steuerung verschachtelter Schleifen. Im Beispiel wird ausgegeben:

1
2
4
5