ABC delle procedure RPG

ABC dell'ILE: le procedure
Le procedure sono la base di ogni programma ILE. La capacità di rendere disponibili, richiamare e
manutenere le procedure è l'obiettivo primario dell'ambiente ILE.
Esistono due tipi di procedure ILE: le procedure principali e le sottoprocedure.
Le procedure principali
Tutti i linguaggi ILE supportano le procedure principali. In effetti, anche se forse non ci si rende conto, in
qualsiasi programma si scrivono delle procedure principali. Queste procedure sono la parte “normale” del
codice. Quando si crea un oggetto di tipo programma, la procedura principale è la sezione di codice che viene
eseguita quando si richiama il programma. Se non si è mai scritta una sottoprocedura, tutto il codice fa parte
di procedure principali; i linguaggi OPM (es. l'RPG/400), possono avere un'unica procedura principale e non
supportano le sottoprocedure.
Di seguito un esempio di semplice programma RPG che è molto simile ai programmi che si scrivevano in
RPG/400. Tutto il codice qui presente fa parte della “procedura principale”.
FPRICES IF E K DISK
D ItemNo s 7p 0
C *ENTRY PLIST
C PARM ItemNo
C PARM Price
C ItemNo chain Prices
c if %found
C eval Price = PrPric
c else
c eval Price = -1
c endif
C eval *INLR = *ON
In questo esempio la procedura è scritta in formato fisso, ma è possibile scriverla in formato libero o in
qualsiasi altro linguaggio ILE. Si tratta del “flusso principale” del programma così come lo abbiamo sempre
scritto da anni e anni.
Quando viene compilata una procedura principale, il sistema le assegna lo stesso nome del modulo nella
quale è stata creata. Per questo motivo molti erroneamente parlano del richiamo ad una procedura principale
come di “richiamo di un modulo”. Tecnicamente, è impossibile richiamare un modulo (i moduli non sonocodice eseguibile). Quando si esegue un richiamo a qualcosa che ha il nome di un modulo, effettivamente si
richiama la procedura principale di quel modulo.
Il CL ILE supporta solo le procedure principali (il CL non è ancora dotato del supporto per le
sottoprocedure). Nel CL, tutto ciò che si trova fra PGM e ENDPGM viene considerato come parte della
procedura principale.
Il seguente codice CL è una procedura principale:
PGM PARM(&ITEMNO &PRICE)
DCL VAR(&ITEMNO) TYPE(*DEC) LEN(7 0)
DCL VAR(&PRICE) TYPE(*DEC) LEN(9 2)
OVRDBF FILE(PRICES) TOFILE(QTEMP/PRICES) +
INHWRT(*YES)
CALL PRICEPGM PARM(&ITEMNO &PRICE)
DLTOVR PRICES
ENDPGM
Il C ILE differisce leggermente nel fatto che la procedura principale di un modulo C si chiama effettivamente
“main”. Comunque, in fase di compilazione, il compilatore esporta la procedura sotto lo stesso nome del
modulo di appartenenza.
Di seguito un esempio di procedura scritta in C:
#include
int main(argc, char **argv) {
printf("Hello World!\n");
return 0;
}
Creare una applicazione ILE con le procedure principali
Lo scopo primario dell'ILE è di creare programmi suddivisi in parti piccole e riutilizzabili, e di conseguenza
incrementare le produttività e rendere il codice più facile da manutenere e da leggere.
Sapendo questo, è possibile creare una applicazione ILE composta di piccoli moduli anche senza fare uso di
sottoprocedure. In altre parole, è possibile fare tutto solo con le procedure principali. Per fare questo, si
creano molti diversi moduli con una procedura ciascuno, poi li si collega tutti con i comandi di compilazione
ILE e si ottiene un programma ILE composto di tante routine piccole e riutilizzabili.