REXX: Variablen

Aus Wikibooks

Einleitung[Bearbeiten]

Die Programmiersprache REXX kennt keine Typendeklaration.

Wenn eine Variable noch keinen Wert zugewiesen bekommen hat, also uninitialisiert ist, verhält sie sich wie ein in Großbuchstaben geschriebener String:

say hallo => HALLO

Erst mit der Initialisierung ändert sich das:

hallo = 25
say hallo             =>  25
hallo = "say 5 + 3"
say hallo             =>  say 5 + 3

Durch die Anweisung drop wird eine Variable deinitialisiert und vergessen.

hallo = "Guten Morgen"
say hallo              =>  Guten Morgen
drop hallo
say hallo              =>  HALLO

Werden in REXX Variablen mit Zahlen initialisiert – oder mit Strings, die sich als Zahl interpretieren lassen –, lässt sich mit ihnen rechnen:

a = 25
b = '17'
say a + b => 42
say a - b => 8
say a * b => 425

Um Stringverkettungen vorzunehmen, wird daher ein eigener Operator benötigt:

say a || b => 2517

Stems[Bearbeiten]

Stems haben in vielerlei Hinsicht Ähnlichkeiten mit Arrays:

do i = 1 to 10
   zahl.i = 10 - i
end
zahl.0 = i - 1     /* => 10; per Konvention */

do i = 1 to zahl.0
   say i')' zahl.i
end i

Danach existieren folgende Variablen mit folgender Zuordnung: zahl.1 = 9, zahl.2 = 8, zahl.3 = 7 ... Per Konvention wird unter dem Index 0 die Anzahl der gespeicherten Elemente abgelegt. Mit drop zahl. können dann alle elf Variablen der Form zahl.i mit einem Schlag entfernt werden.

Nicht jeder Index muß verwendet werden; nicht zugewiesene Variablen belegen keinen Speicherplatz. Der folgende Code erzeugt ein spärlich besetztes Array:

a = 2
do 5
   b = 2*a-1
   p.a = b
   a = b
end

Nach dem Ablauf existieren folgende Variablen mit folgender Zuordnung: p.2 = 3, p.3 = 5, p.5 = 9, p.9 = 17, p.17 = 33.


Diese Art der Variablen wird als Stem-Variablen (oder auch Compound-Variablen) bezeichnet; der erste Teil einschließlich des ersten Punkts wird als Stem bezeichnet, der Rest als Tail. Der Tail kann auch aus mehreren Symbolen bestehen, die durch Punkte voneinander getrennt werden; auf diese Weise können auch mehrdimensionale Arrays realisiert werden. Die Werte der verwendeten Symbole können beliebig sein; sie sind durchaus nicht auf Zahlen beschränkt.

Bei allem Komfort von Stems ist immer zu bedenken, dass hier keine Tabellenfunktionalität im Hintergrund existiert. Jede Compoundvariable belegt im Speicher einen beliebigen Platz. Das exzessive Arbeiten mit Stems kann einen drastischen Performance-Verlust mit sich bringen.