4.3 - Declaração e Estrutura

O PL/I oferece uma estrutura de código bastante flexível. Você pode declarar variáveis, procedimentos e pacotes praticamente em qualquer parte do programa. Essa liberdade exige organização, mas permite escrever programas modulares, reutilizáveis e fáceis de manter.

PROCEDURE, OPTIONS(MAIN) e Rótulos

Um programa em PL/I é composto por um ou mais blocos PROCEDURE. Cada procedimento tem um rótulo (label) que serve como identificador e ponto de entrada. O bloco é encerrado com END <rótulo>;.

Para indicar o ponto de entrada principal do programa (aquele que será executado), usa-se a cláusula OPTIONS(MAIN).

HELLO: PROCEDURE OPTIONS(MAIN);
  PUT SKIP LIST('Olá, PL/I!');
END HELLO;

Explicando:

  • HELLO: → nome (rótulo) do procedimento

  • PROCEDURE → início do bloco de código

  • OPTIONS(MAIN) → define que este é o programa principal

  • END HELLO; → encerra o bloco

Outros procedimentos no mesmo arquivo podem ser usados como sub-rotinas ou funções auxiliares, sem a cláusula OPTIONS(MAIN).


PACKAGE e Modularização

Para organizar o código em módulos reutilizáveis, o PL/I oferece o conceito de PACKAGE. Um package agrupa declarações de tipos, variáveis e procedimentos que podem ser exportados e importados por outros arquivos.

UNIT02: PACKAGE EXPORTS(sample);

SAMPLE: PROCEDURE OPTIONS(MAIN);
  /* código do programa */
END SAMPLE;

END UNIT02;

Explicando:

  • PACKAGE → define um módulo

  • EXPORTS(sample) → indica que o procedimento sample pode ser usado fora do package

  • END UNIT02; → encerra o package

Isso permite criar bibliotecas reutilizáveis, como funções matemáticas, utilitários de texto ou acesso a dados.


Sintaxe Básica: DECLARE / DCL, END

As declarações de variáveis usam DECLARE ou seu atalho DCL. Cada linha termina com ponto-e-vírgula.

Atributos comuns:

  • FIXED DECIMAL(p,s) → números com casas decimais

  • FIXED BINARY(n) → inteiros

  • CHARACTER(n) → strings

  • VARYING / VARYINGZ → strings variáveis ou terminadas em zero

  • POINTER / BASED → ponteiros e alocação dinâmica

  • INIT / VALUE → inicialização ou constante

Cada bloco iniciado com PROCEDURE ou PACKAGE deve ser encerrado com END <rótulo>;.


Exemplo Completo

O que esse exemplo mostra:

  • Um PACKAGE que encapsula tudo

  • Dois PROCEDUREs: SAMPLE (principal) e ADDTWO (função auxiliar)

  • Uso de BYVALUE para passagem de parâmetros

  • Uso de RETURN, PUT SKIP, EDIT e STOP

Agora que você entendeu como declarar variáveis, procedimentos e agrupar tudo em pacotes, já tem na mão a base estrutural de qualquer programa em PL/I. Aprender PROCEDURE/OPTIONS(MAIN) e PACKAGE é garantia de escrever código modular, reaproveitável e fácil de depurar em ambiente mainframe. Com a sintaxe básica de DECLARE/DCL e END bem assimilada, o próximo passo é explorar as estruturas de controle (IF, DO, SELECT) e o tratamento de erros via ON-units — assunto que veremos na próxima seção

Last updated