| Bellacosa Mainframe e a clausula END no COBOL |
O que é a Cláusula END nos Comandos COBOL?
A cláusula END foi introduzida nas versões modernas do COBOL para indicar explicitamente o fim de um comando ou estrutura lógica.
Ela torna os programas:
✅ Mais legíveis
✅ Mais seguros
✅ Mais fáceis de manter
✅ Menos sujeitos a erros de aninhamento
Antes do END
Nas versões antigas do COBOL era comum encontrar:
IF SALDO > 0
DISPLAY 'SALDO POSITIVO'
ELSE
DISPLAY 'SALDO NEGATIVO'.
Em estruturas complexas, ficava difícil saber onde terminava cada comando.
Com END
IF SALDO > 0
DISPLAY 'SALDO POSITIVO'
ELSE
DISPLAY 'SALDO NEGATIVO'
END-IF.
Agora o término fica explícito.
Por que a IBM criou os ENDs?
Imagine:
IF A = 1
IF B = 2
IF C = 3
DISPLAY 'OK'
ELSE
DISPLAY 'ERRO'
Pergunta:
O ELSE pertence a qual IF?
Nem sempre é fácil responder.
Com ENDs:
IF A = 1
IF B = 2
IF C = 3
DISPLAY 'OK'
ELSE
DISPLAY 'ERRO'
END-IF
END-IF
END-IF.
Não existe dúvida.
Principais Comandos com END
END-IF
Finaliza IF.
IF WS-SALDO > 0
DISPLAY 'OK'
END-IF.
END-PERFORM
Finaliza PERFORM inline.
PERFORM
DISPLAY 'PROCESSANDO'
END-PERFORM.
END-READ
Finaliza READ.
READ ARQCLI
AT END
MOVE 'S' TO FIM-ARQ
END-READ.
END-WRITE
Finaliza WRITE.
WRITE REG-SAIDA
END-WRITE.
END-REWRITE
Finaliza REWRITE.
REWRITE REG-CLIENTE
END-REWRITE.
END-DELETE
Finaliza DELETE.
DELETE ARQCLI
END-DELETE.
END-SEARCH
Finaliza SEARCH.
SEARCH TAB-CLIENTES
WHEN CODIGO = 100
DISPLAY 'ACHOU'
END-SEARCH.
END-EVALUATE
Finaliza EVALUATE.
EVALUATE TRUE
WHEN SALDO > 0
DISPLAY 'POSITIVO'
WHEN OTHER
DISPLAY 'ZERO'
END-EVALUATE.
END-STRING
Finaliza STRING.
STRING
NOME
SOBRENOME
INTO WS-NOME
END-STRING.
END-UNSTRING
Finaliza UNSTRING.
UNSTRING WS-DADOS
DELIMITED BY ';'
INTO CAMPO1
CAMPO2
END-UNSTRING.
END-COMPUTE
Finaliza COMPUTE.
COMPUTE WS-TOTAL = A + B
END-COMPUTE.
END-CALL
Finaliza CALL.
CALL 'CALCULA'
USING WS-VALOR
END-CALL.
END-START
Finaliza START.
START ARQVSAM
KEY >= WS-CHAVE
END-START.
END-ACCEPT
Finaliza ACCEPT.
ACCEPT WS-DATA
END-ACCEPT.
END-DISPLAY
Finaliza DISPLAY.
DISPLAY 'TESTE'
END-DISPLAY.
END-ADD
Finaliza ADD.
ADD 10 TO WS-TOTAL
END-ADD.
END-SUBTRACT
Finaliza SUBTRACT.
SUBTRACT 5 FROM WS-TOTAL
END-SUBTRACT.
END-MULTIPLY
Finaliza MULTIPLY.
MULTIPLY A BY B
END-MULTIPLY.
END-DIVIDE
Finaliza DIVIDE.
DIVIDE A INTO B
END-DIVIDE.
END-JSON
Usado em COBOL moderno.
JSON GENERATE WS-JSON
FROM CLIENTE
END-JSON.
END-XML
Também muito comum.
XML GENERATE WS-XML
FROM CLIENTE
END-XML.
END-EXEC
Muito utilizado em DB2 e CICS.
DB2
EXEC SQL
SELECT NOME
INTO :WS-NOME
FROM CLIENTES
END-EXEC.
CICS
EXEC CICS
SEND MAP('TELA1')
END-EXEC.
END-EXEC é Especial
Porque:
EXEC SQL
e
EXEC CICS
não são comandos COBOL puros.
São pré-processados antes da compilação.
Exemplo Completo
IF WS-SALDO > 0
PERFORM
DISPLAY 'SALDO POSITIVO'
END-PERFORM
ELSE
DISPLAY 'SEM SALDO'
END-IF.
Benefícios
✅ Legibilidade
✅ Menos erros
✅ Melhor manutenção
✅ Facilita debug
✅ Facilita revisões de código
Padrão Corporativo
Hoje a maioria das empresas exige:
END-IF
END-PERFORM
END-EVALUATE
END-READ
END-EXEC
mesmo quando opcionais.
Erros Comuns
Esquecer END-IF
IF A = 1
DISPLAY 'OK'
Pode gerar erro de compilação.
Misturar ENDs
IF A = 1
PERFORM
DISPLAY 'OK'
END-IF
Compilador detecta inconsistência.
Curiosidade
Nas décadas de 1970 e 1980 muitos programas COBOL eram escritos sem ENDs, utilizando apenas pontos finais (.) para encerrar blocos. Em aplicações modernas, os ENDs são considerados uma das melhores práticas de programação COBOL.
Resumo Rápido
| Comando | Terminador |
|---|---|
| IF | END-IF |
| PERFORM | END-PERFORM |
| READ | END-READ |
| EVALUATE | END-EVALUATE |
| SEARCH | END-SEARCH |
| STRING | END-STRING |
| UNSTRING | END-UNSTRING |
| CALL | END-CALL |
| JSON | END-JSON |
| XML | END-XML |
| EXEC SQL | END-EXEC |
| EXEC CICS | END-EXEC |
Conclusão
A cláusula END em COBOL serve para indicar explicitamente o término de comandos e blocos lógicos. Ela melhora a legibilidade, reduz ambiguidades, facilita a manutenção e é considerada uma prática obrigatória em praticamente todos os projetos COBOL modernos, especialmente em ambientes IBM Z, CICS, IMS, DB2, XML e JSON.
Sem comentários:
Enviar um comentário