| Bellacosa Mainframe e o terminador de escopo em cobol |
O que é Terminador de Escopo em COBOL?
Os Terminadores de Escopo (Scope Terminators) são palavras-chave usadas para indicar explicitamente onde termina uma instrução COBOL.
Eles foram introduzidos para resolver um problema clássico dos programas antigos:
saber exatamente onde um comando termina.
Antes dos Terminadores de Escopo
Nas versões antigas do COBOL era comum encontrar:
IF WS-SALDO > 0
DISPLAY 'CLIENTE ATIVO'
ELSE
DISPLAY 'CLIENTE INATIVO'.
Quando a lógica crescia, surgiam dúvidas:
Qual IF pertence a qual ELSE?
Problema dos IFs Aninhados
Exemplo:
IF A = 1
IF B = 2
DISPLAY 'OK'
ELSE
DISPLAY 'ERRO'
Pergunta:
O ELSE pertence ao IF A ou ao IF B?
Nem sempre fica claro.
Solução
A IBM e os fabricantes de compiladores introduziram:
Terminadores de Escopo
Principais Terminadores
| Comando | Terminador |
|---|---|
| IF | END-IF |
| EVALUATE | END-EVALUATE |
| PERFORM | END-PERFORM |
| READ | END-READ |
| WRITE | END-WRITE |
| REWRITE | END-REWRITE |
| SEARCH | END-SEARCH |
| STRING | END-STRING |
| UNSTRING | END-UNSTRING |
| COMPUTE | END-COMPUTE |
| EXEC | END-EXEC |
END-IF
O mais conhecido.
Exemplo
IF WS-SALDO > 0
DISPLAY 'ATIVO'
ELSE
DISPLAY 'INATIVO'
END-IF
Agora não existe dúvida.
END-EVALUATE
Fecha um EVALUATE.
EVALUATE WS-OPCAO
WHEN 1
DISPLAY 'CONSULTA'
WHEN 2
DISPLAY 'ALTERACAO'
END-EVALUATE
END-PERFORM
Fecha um PERFORM INLINE.
PERFORM UNTIL EOF = 'S'
READ ARQCLI
END-PERFORM
END-READ
Fecha um READ.
READ ARQCLI
AT END
MOVE 'S' TO EOF
END-READ
END-WRITE
Fecha um WRITE.
WRITE REG-SAIDA
INVALID KEY
DISPLAY 'ERRO'
END-WRITE
END-REWRITE
Muito usado com VSAM.
REWRITE REG-CLIENTE
INVALID KEY
DISPLAY 'ERRO'
END-REWRITE
END-SEARCH
Usado em tabelas.
SEARCH WS-TABELA
WHEN WS-CODIGO = WS-CHAVE
DISPLAY 'ACHOU'
END-SEARCH
END-STRING
Usado em concatenação.
STRING
WS-NOME
WS-SOBRENOME
INTO WS-NOME-COMP
END-STRING
END-UNSTRING
Usado para separar campos.
UNSTRING WS-LINHA
DELIMITED BY ';'
INTO WS-CAMPO1
WS-CAMPO2
END-UNSTRING
END-COMPUTE
Fecha um COMPUTE.
COMPUTE WS-TOTAL =
WS-A + WS-B
ON SIZE ERROR
DISPLAY 'ERRO'
END-COMPUTE
END-EXEC
Muito usado com:
DB2;
CICS;
IMS;
MQ.
Exemplo:
EXEC SQL
SELECT NOME
INTO :WS-NOME
FROM CLIENTES
END-EXEC
Como funciona?
Visualmente:
COMANDO
↓
BLOCO
↓
END-COMANDO
Exemplo Completo
Sem terminadores:
IF A = 1
IF B = 2
DISPLAY 'OK'
ELSE
DISPLAY 'ERRO'
Difícil de entender.
Com terminadores:
IF A = 1
IF B = 2
DISPLAY 'OK'
ELSE
DISPLAY 'ERRO'
END-IF
END-IF
Muito mais claro.
Vantagens
Melhor legibilidade
Menos erros
Mais fácil manutenção
Menos ambiguidades
Facilita revisões de código
Programação Estruturada
Os terminadores de escopo foram um marco na evolução do COBOL estruturado.
Eles ajudaram a substituir o uso excessivo de:
GO TO
COBOL Moderno
Hoje praticamente todos os compiladores modernos recomendam:
END-IF
END-EVALUATE
END-PERFORM
em vez de depender apenas de pontos finais.
Curiosidades
1. Os primeiros programas COBOL não possuíam terminadores de escopo
2. Muitos sistemas antigos ainda utilizam apenas pontos finais
3. END-IF foi uma das maiores melhorias de legibilidade do COBOL
4. Grandes bancos exigem terminadores de escopo em seus padrões de desenvolvimento
Erros comuns de iniciantes
Esquecer END-IF
Esquecer END-EVALUATE
Misturar pontos finais com terminadores
Fechar blocos na ordem errada
Resumo rápido
| Comando | Terminador |
|---|---|
| IF | END-IF |
| EVALUATE | END-EVALUATE |
| PERFORM | END-PERFORM |
| READ | END-READ |
| WRITE | END-WRITE |
| REWRITE | END-REWRITE |
| SEARCH | END-SEARCH |
| STRING | END-STRING |
| UNSTRING | END-UNSTRING |
| COMPUTE | END-COMPUTE |
| EXEC | END-EXEC |
Conclusão
Os Terminadores de Escopo são palavras-chave que indicam explicitamente o final de comandos estruturados em COBOL. Eles aumentam a legibilidade, reduzem ambiguidades e são fundamentais para o desenvolvimento moderno de aplicações COBOL em ambientes Mainframe IBM Z, especialmente em sistemas que utilizam CICS, DB2, VSAM e processamento batch.
Sem comentários:
Enviar um comentário