| Bellacosa Mainframe exemplifica call no Cobol |
☕ “CALL ‘SABEDORIA’ USING PADAWAN” — O Guia Definitivo de Subprogramação COBOL Que Separa Aprendizes de Mestres do Mainframe
Se você acha que subprogramação em COBOL é só “CALL e pronto”… prepare-se.
Você está prestes a atravessar a porta que leva do programador de exercícios para o engenheiro de sistemas que mantém bancos funcionando 💎
Neste artigo, vou falar com você — jovem Padawan do mainframe — no melhor estilo Bellacosa: direto, prático, cheio de contexto real, curiosidades históricas e aquelas “armadilhas invisíveis” que só aparecem em produção às 3h da manhã.
Pegue seu café ☕. Vamos lá.
🧠 Por que subprogramação é o coração do COBOL?
Grandes sistemas COBOL NÃO são programas gigantes.
Eles são:
👉 Redes de módulos especializados
👉 Bibliotecas corporativas compartilhadas
👉 Camadas de negócio reutilizáveis
👉 Serviços internos antes da palavra “microservice” existir
Um sistema bancário típico executa milhares de subprogramas por segundo.
🧩 O que é um Subprograma, afinal?
Um subprograma é um programa COBOL independente que:
✔ Pode ser chamado por outro
✔ Executa uma tarefa específica
✔ Recebe dados
✔ Retorna resultados
✔ Continua existindo sozinho
Em termos modernos:
É como uma função gigante com superpoderes de desempenho.
📞 O ritual sagrado: CALL
Programa principal (Caller)
CALL "CALCJURO" USING WS-VALOR WS-RESULT
Subprograma (Callee)
LINKAGE SECTION.
01 VALOR PIC 9(7)V99.
01 RESULT PIC 9(7)V99.
PROCEDURE DIVISION USING VALOR RESULT.
COMPUTE RESULT = VALOR * 1.05
GOBACK.
💥 Pronto. Comunicação entre programas.
🔗 Easter Egg #1 — COBOL já fazia “APIs internas” nos anos 70
Antes de REST, SOAP, gRPC…
Mainframes já tinham bibliotecas de serviços corporativos reutilizáveis.
📦 O segredo oculto: LINKAGE SECTION
Padawan, grave isto na pedra:
Sem LINKAGE SECTION, não há parâmetros.
Ela define a interface do subprograma — o “contrato”.
🔄 Como os dados são passados?
🔹 BY REFERENCE (padrão)
👉 Mesma área de memória
👉 Alterações retornam
CALL "PGM" USING WS-DATA
💎 Rápido, eficiente, poderoso… e perigoso.
🔹 BY CONTENT
👉 Cópia do valor
👉 Caller não vê mudanças
CALL "PGM" USING BY CONTENT WS-DATA
🔹 BY VALUE
👉 Valor literal — comum com C/Java
⚠️ Easter Egg #2 — A causa invisível de bugs fantasma
90% dos “dados misteriosamente alterados” em sistemas antigos são BY REFERENCE mal usado.
🧭 Quem é o Main Program?
Plot twist:
👉 O código não define.
👉 O ambiente define.
No batch:
➡ O programa do EXEC no JCL é o principal.
Em CICS:
➡ O ambiente decide.
O mesmo módulo pode ser:
✔ Main hoje
✔ Subprograma amanhã
✔ Serviço compartilhado depois
🧩 Embedded vs External — A Guerra dos Módulos
🧱 Embedded (Contained)
✔ Dentro do mesmo source
✔ Compilado junto
✔ Uso local
MAIN
└─ SUB-A (no mesmo arquivo)
🌐 External
✔ Fonte separado
✔ Compilado independente
✔ Reutilizável
👉 Padrão dominante nas empresas.
🏦 Curiosidade real
Alguns subprogramas bancários:
💰 Executam bilhões de vezes
📅 Estão em produção há décadas
🧠 São mais antigos que muitos programadores
🛑 Como terminar um programa corretamente?
Padawan, memorize isso:
| Comando | Subprograma | Main Program |
|---|---|---|
| GOBACK | Retorna | Encerra |
| EXIT PROGRAM | Retorna | ❌ Não usar |
| STOP RUN | 💀 Mata tudo | Encerra |
⚠️ Easter Egg #3 — O botão nuclear
Um STOP RUN dentro de um subprograma compartilhado pode derrubar:
💥 Transações online
💥 Jobs batch inteiros
💥 Sistemas críticos
Sim, já aconteceu.
📡 Comunicação entre Programas — Três níveis de poder
🟦 Local
Só dentro do programa.
👉 Padrão.
🌍 Global
Programa + subprogramas embutidos.
🌐 External
Todos os programas da run unit.
👉 Use com extremo cuidado.
⚠️ Regra de Ouro Corporativa
Prefira parâmetros explícitos a variáveis globais.
Isso é engenharia profissional.
📥 RETURNING — O modo “função moderna”
Alguns compiladores permitem retorno explícito:
CALL "SUB"
USING IN-DATA
RETURNING OUT-DATA
Subprograma:
PROCEDURE DIVISION USING IN-DATA
RETURNING OUT-DATA.
💎 Menos comum, mas elegante.
🏦 Padrão real de mercado
Quase sempre:
CALL "SERVICO"
USING REQUEST-BLOCK
RESPONSE-BLOCK
Porque sistemas grandes preferem estruturas completas.
🧪 Passo a passo para criar um subprograma robusto
1️⃣ Defina interface clara (LINKAGE)
2️⃣ Use estruturas, não campos soltos
3️⃣ Documente a ordem dos parâmetros
4️⃣ Use GOBACK
5️⃣ Evite GLOBAL/EXTERNAL sem necessidade
6️⃣ Teste isoladamente
💎 Easter Egg Final — O verdadeiro poder do COBOL
Subprogramação é a razão pela qual:
🏦 Bancos não param
✈️ Sistemas de reserva funcionam
📊 Processamento massivo é possível
🕰️ Código sobrevive por décadas
☕ Mensagem do Mestre para o Padawan
Se você dominar subprogramação COBOL, você deixa de ser apenas um programador.
Você se torna:
🏛️ Um arquiteto de sistemas críticos
Porque o mainframe não é sobre código pequeno.
É sobre:
👉 Confiabilidade
👉 Desempenho
👉 Longevidade
👉 Engenharia disciplinada
Sem comentários:
Enviar um comentário