COBOL - Sottoprogrammi
La subroutine Cobol è un programma che può essere compilato indipendentemente ma non può essere eseguito indipendentemente. Esistono due tipi di subroutine:internal subroutines piace Perform dichiarazioni e external subroutine come il verbo CALL.
Call Verb
Il verbo Call viene utilizzato per trasferire il controllo da un programma a un altro programma. Il programma che contiene il verbo CALL è ilCalling Program e il programma chiamato è noto come Called Program. La chiamata all'esecuzione del programma si interromperà finché il programma chiamato non termina l'esecuzione. L'istruzione Exit Program viene utilizzata nel programma Called per trasferire nuovamente il controllo.
Chiamati vincoli di programma
Di seguito sono riportati i requisiti del programma chiamato:
Linkage sectiondeve essere definito nel programma chiamato. Consiste di elementi di dati passati nel programma. Gli elementi di dati non devono avere la clausola Value. La clausola PIC deve essere compatibile con le variabili passate attraverso il programma chiamante.
Procedure division using ha un elenco di variabili passate dal programma chiamante e l'ordine deve essere lo stesso menzionato nel verbo Call.
Exit programviene utilizzata nel programma chiamato per ritrasferire il controllo. Deve essere l'ultima istruzione nel programma chiamato.
I parametri possono essere passati da un programma all'altro in due modi:
- Come riferimento
- Per contenuto
Chiama per riferimento
Se i valori delle variabili nel programma chiamato vengono modificati, i loro nuovi valori si rifletteranno nel programma chiamante. SeBY la clausola non è specificata, quindi le variabili vengono sempre passate per riferimento.
Sintassi
Di seguito è riportata la sintassi per chiamare la subroutine per riferimento:
CALL sub-prog-name USING variable-1, variable-2.
Example
L'esempio seguente è il programma chiamante MAIN e UTIL è il programma chiamato -
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.
PROCEDURE DIVISION.
CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
DISPLAY 'Student Id : ' WS-STUDENT-ID
DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.
Chiamato programma
IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-STUDENT-ID PIC 9(4).
01 LS-STUDENT-NAME PIC A(15).
PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
DISPLAY 'In Called Program'.
MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Quando compili ed esegui il programma sopra, produce il seguente risultato:
In Called Program
Student Id : 1111
Student Name : Tim
Chiama per contenuto
Se i valori delle variabili nel programma chiamato vengono modificati, i loro nuovi valori non si rifletteranno nel programma chiamante.
Sintassi
Di seguito è riportata la sintassi per chiamare la subroutine in base al contenuto:
CALL sub-prog-name USING
BY CONTENT variable-1, BY CONTENT variable-2.
Example
L'esempio seguente è il programma chiamante MAIN e UTIL è il programma chiamato -
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.
PROCEDURE DIVISION.
CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
DISPLAY 'Student Id : ' WS-STUDENT-ID
DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.
Chiamato programma
IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-STUDENT-ID PIC 9(4).
01 LS-STUDENT-NAME PIC A(15).
PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
DISPLAY 'In Called Program'.
MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Quando compili ed esegui il programma sopra, produce il seguente risultato:
In Called Program
Student Id : 1000
Student Name : Tim
Tipi di chiamata
Esistono due tipi di chiamate:
Static Callsi verifica quando un programma viene compilato con l'opzione del compilatore NODYNAM. Un programma chiamato statico viene caricato nella memoria in fase di compilazione.
Dynamic Callsi verifica quando un programma viene compilato con l'opzione del compilatore DYNAM e NODLL. Un programma chiamato dinamico viene caricato nella memoria in fase di esecuzione.