Translate

quarta-feira, 28 de fevereiro de 2007

O que é a Cláusula END nos Comandos COBOL?

 

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

ComandoTerminador
IFEND-IF
PERFORMEND-PERFORM
READEND-READ
EVALUATEEND-EVALUATE
SEARCHEND-SEARCH
STRINGEND-STRING
UNSTRINGEND-UNSTRING
CALLEND-CALL
JSONEND-JSON
XMLEND-XML
EXEC SQLEND-EXEC
EXEC CICSEND-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