REXX: Schleifen
Die universelle Schleife
[Bearbeiten]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 Anweisungen
[Bearbeiten]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 Wiederholungen
[Bearbeiten]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ählschleife
[Bearbeiten]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-Schleife
[Bearbeiten]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-Schleife
[Bearbeiten]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 leave
[Bearbeiten]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