Translate

domingo, 11 de março de 2007

O que é Terminador de Escopo em COBOL?

 

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

ComandoTerminador
IFEND-IF
EVALUATEEND-EVALUATE
PERFORMEND-PERFORM
READEND-READ
WRITEEND-WRITE
REWRITEEND-REWRITE
SEARCHEND-SEARCH
STRINGEND-STRING
UNSTRINGEND-UNSTRING
COMPUTEEND-COMPUTE
EXECEND-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

ComandoTerminador
IFEND-IF
EVALUATEEND-EVALUATE
PERFORMEND-PERFORM
READEND-READ
WRITEEND-WRITE
REWRITEEND-REWRITE
SEARCHEND-SEARCH
STRINGEND-STRING
UNSTRINGEND-UNSTRING
COMPUTEEND-COMPUTE
EXECEND-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