Uso delle variabili composte e dei gambi

A volte è utile memorizzare gruppi di dati correlati in modo da facilitarne il recupero. Ad esempio, si può memorizzare un elenco di nomi di dipendenti in un array e recuperarli per numero. Una matrice è una disposizione di elementi in una o più dimensioni, identificata da un unico nome. Un array chiamato employee potrebbe contenere nomi come i seguenti:
EMPLOYEE
   (1) Adams, Joe
   (2) Crandall, Amy
   (3) Devon, David
   (4) Garrison, Donna
   (5) Leone, Mary
   (6) Sebastian, Isaac

In alcuni linguaggi informatici, per accedere a un elemento di una matrice si utilizza il numero dell'elemento. Ad esempio, employee(1) recupera Adams, Joe. In REXX si utilizzano variabili composte.

Che cos'è una variabile composta?

È possibile utilizzare le variabili composte per creare un array o un elenco di variabili in REXX. Una variabile composta, ad esempio: employee.1, è costituita da un gambo e da una coda.

Il gambo è un simbolo con un punto alla fine. Ecco alcuni esempi di steli:
FRED.
Array.
employee.
Una coda è simile a un pedice. Segue il gambo e consiste in parti aggiuntive del nome che possono essere simboli costanti (come in employee.1 ), simboli semplici (come in employee.n ) o nulli. Pertanto, in REXX, i pedici non devono necessariamente essere numerici. Una variabile composta contiene almeno un periodo con caratteri su entrambi i lati. Ecco altri esempi di variabili composte:
FRED.5
Array.Row.Col
employee.name.phone
Non è possibile effettuare alcuna sostituzione per il nome del gambo, ma è possibile utilizzare la sostituzione per la coda. Ad esempio:
employee.7='Amy Martin'
new=7
employee.new='May Davis'
say employee.7            /* Produces: May Davis */
Come per le altre variabili REXX, se non è stato precedentemente assegnato un valore a una variabile in coda, essa assume il valore del proprio nome in maiuscolo.
first = 'Fred'
last = 'Higgins'
name = first.last           /* NAME is assigned FIRST.Higgins */
                            /* The value FIRST appears because the */
                            /* variable FIRST is a stem, which */
                            /* cannot change. */
SAY name.first.middle.last  /* Produces NAME.Fred.MIDDLE.Higgins */
È possibile utilizzare un ciclo DO per inizializzare un gruppo di variabili composte e impostare un array.
DO i = 1 TO 6
   PARSE PULL employee.i
END
Se si utilizzano gli stessi nomi usati nell'esempio dell'array dei dipendenti, si ottiene un gruppo di variabili composte come segue:
employee.1 = 'Adams, Joe'
employee.2 = 'Crandall, Amy'
employee.3 = 'Devon, David'
employee.4 = 'Garrison, Donna'
employee.5 = 'Leone, Mary'
employee.6 = 'Sebastian, Isaac'
Dopo che i nomi sono stati inseriti nel gruppo delle variabili composte, è possibile accedere facilmente a un nome tramite il suo numero o tramite una variabile che rappresenta il suo numero.
name = 3
SAY employee.name      /* Produces 'Devon, David' */

Per ulteriori informazioni sulle variabili composte, vedere Simboli composti.

Utilizzo di steli

Quando si lavora con variabili composte, è spesso utile inizializzare un intero insieme di variabili con lo stesso valore. È possibile farlo facilmente utilizzando un incarico che includa un gambo. Ad esempio, number.=0 inizializza tutti gli elementi dell'array denominato number. a 0.

È possibile modificare i valori di tutte le variabili composte di una matrice nello stesso modo. Ad esempio, per modificare tutti i nomi dei dipendenti in Nobody, utilizzare la seguente istruzione di assegnazione:
 employee. = 'Nobody'
Di conseguenza, tutte le variabili composte che iniziano con lo stelo employee., precedentemente assegnate o meno, hanno il valore Nobody. Dopo l'assegnazione di uno stelo, è possibile assegnare nuovi valori alle singole variabili composte.
employee.='Nobody'
SAY employee.5               /* Produces 'Nobody' */
SAY employee.10              /* Produces 'Nobody' */
SAY employee.oldest          /* Produces 'Nobody' */

employee.new = 'Clark, Evans'
SAY employee.new             /* Produces 'Clark, Evans' */

È possibile utilizzare i gambi con i comandi EXECIO e RFS quando si legge e si scrive da un file. Vedere EXECIO e RFS. RFS è il metodo di I/O preferito in CICS®.

Esercizi - Utilizzo delle variabili composte e dei peduncoli

  1. Dopo queste istruzioni di assegnazione, cosa producono le seguenti istruzioni SAY?
    a = 3          /* assigns '3' to variable 'A' */
    d = 4          /* '4' to 'D' */
    c = 'last'     /* 'last' to 'C' */
    a.d = 2        /* '2' to 'A.4' */
    a.c = 5        /* '5' to 'A.last' */
    z.a.d = 'cv3d' /* 'cv3d' to 'Z.3.4' */
    1. DIRE a
    2. DIRE D
    3. DIRE c
    4. DIRE a.a
    5. DIRE A.D
    6. DIRE d.c
    7. DICHIARAZIONE c.a
    8. DIRE a.first
    9. DICHIARAZIONE z.a.4
  2. Dopo queste istruzioni di assegnazione, quale output producono le istruzioni SAY?
    hole.1 = 'full'
    hole. = 'empty'
    hole.s = 'full'
    1. DIRE hole.1
    2. DIRE hole.s
    3. DIRE hole.mouse
RISPOSTE
    1. 3
    2. 4
    3. Ultimo
    4. A.3
    5. 2
    6. D.last
    7. C.3
    8. A.FIRST
    9. cv3d
    1. vuoto
    2. completo
    3. vuoto