COBOL - Subprograma
Como discutimos no capítulo anterior. A instrução de chamada é usada para transferir o controle de um programa para outro. O programa que contém a instrução CALL é o Calling Program e o programa que está sendo chamado é conhecido como Called Program.
Estrutura do Programa de Chamada:
- A instrução CALL deve ser adicionada.
Estrutura do Programa Chamado:
- Linkage section deve ser definida no programa chamado. Consiste em elementos de dados passados no programa. Os itens de dados não devem ter cláusula Value. A cláusula PIC deve ser compatível com as variáveis passadas pelo programa de chamada.
- Procedure division using tem uma lista de variáveis passadas do programa chamador e a ordem deve ser a mesma mencionada no verbo Chamar.
- Exit program statement é usada no programa chamado para transferir o controle de volta. Deve ser a última instrução no programa chamado.
Exemplo 1: Chamada por referência(Se os valores das variáveis no programa chamado forem modificados, seus novos valores refletirão no programa chamador. Se a cláusula BY não for especificada, as variáveis serão sempre passadas por referência.)
Programa CALL:
IDENTIFICATION DIVISION.
PROGRAM-ID. COBLMAIN.
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 N'''''''''''''''''''''ame : ' WS-STUDENT-NAME
STOP RUN.
|
Called Program:
IDENTIFICATION DIVISION.
PROGRAM-ID. COBLUTIL.
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. |
Quando você compila e executa o programa acima, ele produz o seguinte resultado
−
Resultado SYSOUT:
In Called Program
Student Id : 1111
Student Name : Tim |
Exemplo 2: Call By Content (Se os valores das variáveis no programa chamado forem modificados, seus novos valores não serão refletidos no programa chamador.)
CALL Program:
IDENTIFICATION DIVISION.
PROGRAM-ID. COBLMAIN.
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. |
Called Program:
IDENTIFICATION DIVISION.
PROGRAM-ID. COBLUTIL.
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. |
Quando você compila e executa o programa acima, ele produz o seguinte resultado −
Resultado SYSOUT:
In Called Program
Student Id : 1000
Student Name : Tim |