Menu

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