REXX: Schleifen
Die universelle Schleife
BearbeitenIm 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
BearbeitenWenn 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
BearbeitenSoll 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
Bearbeitendo 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
BearbeitenDie 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
BearbeitenHier 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)
Bearbeitendo 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
BearbeitenZur 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