[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 678.   Nomi di condizione, raggruppamento e qualificazione

Per rappresentare in modo immediato una condizione che verifichi la corrispondenza tra il contenuto di una variabile e un insieme di valori prestabiliti, si possono utilizzare i nomi di condizione. I nomi di condizione sono sostanzialmente delle costanti che descrivono un'espressione condizionale di questo tipo e si dichiarano con il numero di livello 88.

Le variabili possono essere raggruppate diversamente, purché si trovino all'interno di una stessa variabile strutturata e siano adiacenti.

I nomi dati alle variabili e ad altri oggetti del programma, in certe situazioni possono richiedere la «qualificazione», che consiste nello specificare il contesto al quale si riferiscono.

678.1   Nomi di condizione

Attraverso il livello 88 è possibile definire una costante speciale, con lo scopo di rappresentare la possibilità che una variabile contenga certi valori. In pratica, si dichiara una variabile, con i livelli da 01 a 49 o anche con il livello 77. A questa variabile si abbinano una o più costanti dichiarate con il livello 88, che descrivono la possibilità che la variabile a cui si riferiscono contenga un certo insieme di valori. Le costanti di livello 88, dichiarate in questo modo, si usano poi nelle condizioni.

                   /            \  /           .-- /         \         --. \
                   | VALUE IS   |  |           |   | THROUGH |           | |
88  condition-name < ¯¯¯¯¯      >  < literal-1 |   < ¯¯¯¯¯¯¯ > literal-2 | >... .
                   | VALUES ARE |  |           |   | THRU    |           | |
                   \ ¯¯¯¯¯¯     /  \           `-- \ ¯¯¯¯    /         --' /

Nello schema sintattico si vede soltanto la dichiarazione del livello 88, ma si deve tenere conto che si tratta di istruzioni che vanno collocate a partire dalla riga successiva a quella di dichiarazione della variabile a cui si riferiscono.

La parola chiave THROUGH o THRU si usa per specificare un intervallo di valori (dalla costante literal-1 a literal-2. Il valore singolo o l'intervallo di valori, può essere seguito da altri.

Nell'esempio seguente, si vede la dichiarazione della variabile VERNICIATURA che può contenere una stringa di 30 caratteri (alfanumerica). A questa variabile si associano due nomi di condizione, VERNICE-CHIARA e VERNICE-SCURA, che servono a definire due gruppi di colori, descritti per nome. Da questo si intuisce che nella parte procedurale del programma venga attribuito alla variabile VERNICIATURA il nome di un colore (scritto con lettere maiuscole); poi, per verificare il tipo di colore si può usare uno di questi nomi di condizione, per esprimere il fatto che la variabile contenga uno dei nomi del gruppo a cui quel nome fa riferimento.

000000 01  VERNICIATURA     PIC X(30).
000000     88  VERNICE-CHIARA   "ARANCIO", "GIALLO", "VERDE",
000000                          "AZZURRO",  "GRIGIO",  "BIANCO".
000000     88  VERNICE-SCURA    "NERO", "MARRONE", "ROSSO",
000000                          "BLU",  "VIOLA".

L'esempio seguente descrive la variabile CODICE che può contenere una sola cifra numerica. A questa variabile si associano dei nomi di condizione, che descrivono raggruppamenti diversi delle cifre che possono essere contenute nella variabile.

000000     02  CODICE           PIC 9.
000000         88  PARI         0, 2, 4, 6, 8.
000000         88  DISPARI      1, 3, 5, 7, 9.
000000         88  BASSO        0 THRU 4.
000000         88  ALTO         5 THRU 9.

Nella divisione PROCEDURE DIVISION potrebbero apparire righe come quelle successive, per verificare che la variabile CODICE contenga certi valori:

000000     IF PARI
000000     THEN
000000         PERFORM ...;
000000     ELSE
000000         ...

In questo modo si evita di scrivere un'espressione condizionale complessa come nell'esempio seguente:

000000     IF CODICE IS EQUAL TO 0
000000        OR CODICE IS EQUAL TO 2
000000        OR CODICE IS EQUAL TO 4
000000        OR CODICE IS EQUAL TO 6
000000        OR CODICE IS EQUAL TO 8
000000     THEN
000000         PERFORM ...
000000     ELSE
000000         ...

I nomi di condizione si possono associare a variabili che hanno un contenuto alfabetico, alfanumerico e numerico, ma nell'ultimo caso, deve trattarsi di valori rappresentati in forma di stringhe di caratteri (pertanto sono escluse le rappresentazioni compatte che usano quattro bit per cifra e quelle binarie).

Un nome di condizione può essere associato a una variabile che costituisce una tabella, oppure che è contenuta in una struttura tabellare. Per fare riferimento al nome di condizione nella cella giusta, occorre utilizzare gli indici, così come si fa normalmente in queste situazioni.

678.2   Raggruppamento

Il livello 66 permette di raggruppare alcune variabili adiacenti di una stessa struttura:

                                      .--  /           \             --.
                                      |    |  THROUGH  |               |
66  data-name-1  RENAMES data-name-2  |    <  ¯¯¯¯¯¯¯  >  data-name-3  | .
                 ¯¯¯¯¯¯¯              |    |  THRU     |               |
                                      `--  \  ¯¯¯¯     /             --'

Dopo il numero di livello 66 viene dichiarato il nome del raggruppamento, quindi, dopo la parola chiave RENAMES, si indica il nome della prima variabile; eventualmente, dopo la parola chiave THROUGH o THRU, si indica l'ultima variabile da riunire. Si osservi l'esempio seguente:

000000 01  TABULATO.
000000     05  A.
000000         10  A1  PIC X.
000000         10  A2  PIC XXX.
000000         10  A3  PIC XX.
000000         10  A4  PIC XX.
000000     05  B.
000000         10  B1  PIC XX.
000000         10  B2  PIC X(16).
000000         10  B3  PIC X(8).
000000         10  B4  PIC X.
000000 66  C RENAMES A.
000000 66  D RENAMES A1 THRU A3.
000000 66  E RENAMES A4 THRU B2.
000000 66  F RENAMES A2 THRU B.
000000 66  G RENAMES A  THRU B.

Il disegno successivo, anche se non proporzionato rispetto alla dimensione delle variabili, mostra a cosa si riferiscono i vari raggruppamenti:

esempio

678.3   Qualificazione

I nomi usati nel linguaggio COBOL, per le variabili e per la delimitazione di porzioni del contenuto della divisione PROCEDURE DIVISION hanno valore per tutta l'estensione del programma; pertanto, in generale, non possono esserci nomi doppi e non si creano ambiti di funzionamento ristretti.

Dal momento che i nomi usati per dichiarare le variabili, oltre che le sezioni e i paragrafi della divisione PROCEDURE DIVISION, hanno una lunghezza limitata normalmente a soli 30 caratteri, in un programma abbastanza grande si può porre il problema di riuscire a scrivere nomi abbastanza mnemonici e univoci. Per questo, è possibile riutilizzare certi nomi, purché poi questi siano indicati attraverso la qualificazione del loro contesto. Il contesto che consente di qualificare un nome è costituito da una gerarchia di nomi; si osservi l'esempio seguente:

001700 FILE SECTION.
001800 FD  SALES-FILE
001830     LABEL RECORD IS STANDARD
001860     VALUE OF FILE-ID IS "sales".
001900 01  SALES-RECORD.
002000     05  VENDOR-NAME      PIC X(20).
002100     05  VALUE            PIC S9(6).
002200     05  NUMBER           PIC X(13).
002300     05  TYPE             PIC X.
002400     05  VENDOR-REGION    PIC X(17).
002500     05  VENDOR-CITY      PIC X(20).
002600     05  COMMENTS         PIC X(60).

Si vede la dichiarazione del file SALES-FILE, dove la variabile SALES-RECORD ne rappresenta il record, che a sua volta è suddiviso in una serie di campi. La variabile TYPE, di questo esempio, appartiene gerarchicamente alla variabile SALES-RECORD, che a sua volta appartiene al file SALES-FILE.

Supponendo che in questo programma, per qualche ragione, ci sia un'altra variabile con il nome TYPE, si potrebbe individuare quella abbinata all'esempio specificando che si tratta della variabile TYPE di SALES-RECORD; ma volendo supporre che ci siano anche diverse variabili SALES-RECORD, contenenti un campo denominato TYPE, occorrerebbe indicare la variabile TYPE di SALES-RECORD di SALES-FILE.

Nella divisione PROCEDURE DIVISION può succedere qualcosa di simile, quando si usa una suddivisione delle procedure in sezioni e paragrafi. In questo modo, i nomi dei paragrafi potrebbero richiedere una qualificazione, specificando a quale sezione appartengono.

Ciò che consente di qualificare un nome, in modo sufficiente a renderlo univoco, è il qualificatore.

Quando nella divisione PROCEDURE DIVISION si usa un nome che richiede una qualificazione, si usa indifferentemente la parola chiave IN oppure OF:

... TYPE IN SALES-RECORDS ...
... TYPE IN SALES-RECORDS OF SALES-FILE ...

Segue lo schema sintattico per qualificare una variabile:

/                \  .--  /    \             --.    .--  /    \           --.
| data-name-1    |  |    | IN |               |    |    | IN |             |
<                >  |    < ¯¯ >  data-name-2  |... |    < ¯¯ >  file-name  |
| condition-name |  |    | OF |               |    |    | OF |             |
\                /  `--  \ ¯¯ /             --'    `--  \ ¯¯ /           --'

Segue lo schema sintattico per qualificare un paragrafo all'interno della divisione PROCEDURE DIVISION:

                .--  /    \              --.
                |    | IN |                |
paragraph-name  |    < ¯¯ >  section-name  |
                |    | OF |                |
                `--  \ ¯¯ /              --'

Quando si deve usare la qualificazione per individuare un elemento di una tabella, gli indici tra parentesi tonde appaiono alla fine, dopo la qualificazione stessa. Seguono due modelli sintattici alternativi che descrivono il modo di rappresentare un elemento di una tabella, tenendo conto anche della qualificazione:

             .--  /    \             --.
             |    | IN |               |
data-name-1  |    < ¯¯ >  data-name-2  |... [(subscript...)]
             |    | OF |               |
             `--  \ ¯¯ /             --'
            .--  /    \           --.       / literal-1                  \    
            |    | IN |             |       |                            |     
data-name-1 |    < ¯¯ > data-name-2 |... (  < index-name-1 [+ literal-2] >... )
            |    | OF |             |       |                            |     
            `--  \ ¯¯ /           --'       \ index-name-1 [- literal-2] /    

Le regole che stabiliscono la possibilità o meno di usare la qualificazione, sono intuitive e non vengono descritte qui nel dettaglio. La regola generale da seguire è quella della leggibilità del programma sorgente, che richiede di usare la qualificazione solo quando questa è utile per migliorare la chiarezza dello stesso.


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome nomi_di_condizione_raggruppamento_e_qualificazione.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory