- REXX bildet Arrays und Strukturen mit einem recht eigentümlichen Konzept ab. der sogenannten
compound variable (CV). Wird auf eine nichtvorhandene CV zugegriffen, verhält sie sich wie die
anderen Variablen in REXX; sie wird einfach angelegt und mit ihrem Namen in Großbuchstaben initialisiert.
- Die CV unterscheiden sich von normalen Variablen, indem sie mehrere durch einen Punkt miteinander
verbundene Namen enthält. Jeder Name steht hierbei für eine Verschachtelungsebene.
Folgendes Programm soll die Regeln für die Handhabung mit CV erläutern.
(Die Zeile mit --> soll jeweils die dazugehörige Ausgabe darstellen.)
SAY x.y x.y.z x.y.z.1
--> X.Y X.Y.Z X.Y.Z.1
x. = 99
SAY x.y x.y.z x.y.z.1
--> 99 99 99
x.y=100; x.y.z=101; x.y.z.1=102;
SAY x. x.y x.y.z x.y.z.1 x.y.z.2;
--> 99 100 101 102 99
a. = x.;
SAY a. a.y a.y.z a.y.z.1;
--> 99 99 99 99
Wird x. auf z.B. 99 gesetzt, heißt das, daß alle Unterkomponenten auf 99 gesetzt werden, und
das alle weitere neuerzeugte Unterkomponenten diesen Wert erhalten.
Mit der letzten Zuweisung a.=x. werden nicht alle Komonenten übergeben, sondern nur der globale Wert
der CV x. .
- Variablen als Namensstatthalter in CVs
i = 0
c.i = 99
say c.i c.0
--> 99 99
Hier wurde in beiden Fällen der Wert von c.0 ausgegeben. Es wurde nähmlich in c.i das
i durch den Inhalt von i ersetzt, also durch 0.
- Somit können folglich interaktiv CVs angelegt und abgefragt werden.
compund. =0;
SAY 'Werteeingabe mit "exit" beenden';
DO UNTIL eingabe = 'exit'
SAY 'Komponente: ';
PULL komponente;
SAY 'Wert: ';
PARSE PULL wert;
compound.komponente = wert;
SAY 'Weiter?';
PARSE PULL eingabe;
END
SAY 'Nun können Sie die Werte wieder entnehmen';
SAY 'Ende mit "exit"';
eingabe="";
DO UNTIL eingabe = 'exit'
SAY 'Komponente: ';
PULL komponente;
SAY compound.komponente;
SAY 'Weiter?';
PARSE PULL eingabe;
END;
- Ein Array wird mit diesen Komponentennamen als Index realisiert. Wobei der Index vorzugsweise numerische Zahlen
sein kann.
- Nachteile der CV
Tipfehler in einem Programm sind nur sehr schlecht zu finden. Es gibt nichts, wie man sich vor Tippfehler
schützen kann.
Man weiß nie die Gröse eines Arrays, und kann sie auch nicht abfragen. Deshalb muß man selbst
darauf achten, dass man die Größe per Hand in z.B. einer Unterkomponente groesse mitzählt.
Es ist dabei jedoch ueblich die Größe eines Array is der Komonente mit der Nummer 0 zu speichern.