REXX: Schleifen

Aus Wikibooks

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