| Bellacosa Mainframe e o comando evaluate em cobol |
O que é o Comando EVALUATE em COBOL?
O comando EVALUATE é uma das estruturas de decisão mais poderosas do COBOL.
Ele é equivalente ao:
CASE (C, Java, C#)
SWITCH (Java, JavaScript)
MATCH (algumas linguagens modernas)
Seu objetivo é:
executar diferentes ações dependendo do valor de uma variável ou condição.
Por que o EVALUATE existe?
Imagine um programa com vários IFs:
IF WS-OPCAO = 1
PERFORM CONSULTA
ELSE
IF WS-OPCAO = 2
PERFORM INCLUSAO
ELSE
IF WS-OPCAO = 3
PERFORM ALTERACAO
END-IF
END-IF
END-IF
Funciona, mas fica difícil de ler.
Com EVALUATE:
EVALUATE WS-OPCAO
WHEN 1
PERFORM CONSULTA
WHEN 2
PERFORM INCLUSAO
WHEN 3
PERFORM ALTERACAO
END-EVALUATE
Muito mais limpo.
Sintaxe básica
EVALUATE variável
WHEN valor-1
ação
WHEN valor-2
ação
WHEN valor-3
ação
END-EVALUATE
Exemplo simples
EVALUATE WS-NOTA
WHEN 10
DISPLAY 'EXCELENTE'
WHEN 8
DISPLAY 'MUITO BOM'
WHEN 6
DISPLAY 'APROVADO'
END-EVALUATE
WHEN OTHER
Funciona como:
DEFAULT
ELSE
Exemplo
EVALUATE WS-OPCAO
WHEN 1
DISPLAY 'CONSULTA'
WHEN 2
DISPLAY 'ALTERACAO'
WHEN OTHER
DISPLAY 'OPCAO INVALIDA'
END-EVALUATE
EVALUATE TRUE
Muito utilizado em sistemas corporativos.
Permite avaliar condições.
Exemplo
EVALUATE TRUE
WHEN WS-SALDO > 10000
DISPLAY 'CLIENTE VIP'
WHEN WS-SALDO > 5000
DISPLAY 'CLIENTE GOLD'
WHEN OTHER
DISPLAY 'CLIENTE NORMAL'
END-EVALUATE
Comparação com IF
IF:
IF WS-IDADE >= 18
DISPLAY 'MAIOR'
ELSE
DISPLAY 'MENOR'
END-IF
EVALUATE:
EVALUATE TRUE
WHEN WS-IDADE >= 18
DISPLAY 'MAIOR'
WHEN OTHER
DISPLAY 'MENOR'
END-EVALUATE
Avaliando faixas
EVALUATE TRUE
WHEN WS-NOTA >= 9
DISPLAY 'A'
WHEN WS-NOTA >= 7
DISPLAY 'B'
WHEN WS-NOTA >= 5
DISPLAY 'C'
WHEN OTHER
DISPLAY 'D'
END-EVALUATE
Avaliando múltiplos valores
EVALUATE WS-MES
WHEN 1 2 3
DISPLAY 'TRIMESTRE 1'
WHEN 4 5 6
DISPLAY 'TRIMESTRE 2'
WHEN 7 8 9
DISPLAY 'TRIMESTRE 3'
WHEN 10 11 12
DISPLAY 'TRIMESTRE 4'
END-EVALUATE
Avaliando múltiplas variáveis
Uma das características mais poderosas.
EVALUATE WS-TIPO ALSO WS-STATUS
WHEN 'PF' ALSO 'A'
DISPLAY 'PESSOA FISICA ATIVA'
WHEN 'PJ' ALSO 'A'
DISPLAY 'EMPRESA ATIVA'
WHEN OTHER
DISPLAY 'OUTRA SITUACAO'
END-EVALUATE
ALSO
Permite comparar vários campos simultaneamente.
Exemplo bancário
EVALUATE WS-CANAL ALSO WS-PRODUTO
WHEN 'APP' ALSO 'PIX'
PERFORM PROCESSA-PIX
WHEN 'ATM' ALSO 'SAQUE'
PERFORM PROCESSA-SAQUE
WHEN OTHER
PERFORM TRATA-ERRO
END-EVALUATE
Intervalos com THRU
EVALUATE WS-NOTA
WHEN 0 THRU 4
DISPLAY 'REPROVADO'
WHEN 5 THRU 6
DISPLAY 'RECUPERACAO'
WHEN 7 THRU 10
DISPLAY 'APROVADO'
END-EVALUATE
EVALUATE com LEVEL 88
Combinação muito elegante.
01 WS-STATUS PIC X.
88 STATUS-OK VALUE 'S'.
88 STATUS-ERRO VALUE 'N'.
EVALUATE TRUE
WHEN STATUS-OK
DISPLAY 'SUCESSO'
WHEN STATUS-ERRO
DISPLAY 'FALHA'
END-EVALUATE
Vantagens do EVALUATE
Mais legível
Menos IF aninhado
Fácil manutenção
Excelente para regras de negócio
Melhor organização do código
Cuidados
A ordem dos WHEN é importante.
WHEN OTHER deve ficar por último.
Em EVALUATE TRUE, a primeira condição verdadeira é executada.
Onde é mais utilizado?
Praticamente em todos os sistemas COBOL modernos:
Bancos
Seguradoras
Cartões
PIX
Folha salarial
Processamento batch
CICS
Exemplo completo
WORKING-STORAGE SECTION.
01 WS-OPERACAO PIC 9.
PROCEDURE DIVISION.
MOVE 2 TO WS-OPERACAO
EVALUATE WS-OPERACAO
WHEN 1
DISPLAY 'CONSULTA'
WHEN 2
DISPLAY 'INCLUSAO'
WHEN 3
DISPLAY 'ALTERACAO'
WHEN OTHER
DISPLAY 'INVALIDO'
END-EVALUATE
STOP RUN.
Saída:
INCLUSAO
EVALUATE vs IF
| IF | EVALUATE |
|---|---|
| Bom para poucas condições | Ideal para muitas condições |
| Pode gerar IFs aninhados | Código mais limpo |
| Menos legível em regras complexas | Excelente legibilidade |
| Simples | Mais poderoso |
Resumo rápido
| Elemento | Função |
|---|---|
| EVALUATE | Estrutura de decisão |
| WHEN | Condição |
| WHEN OTHER | Caso padrão |
| ALSO | Múltiplas variáveis |
| THRU | Intervalo |
| EVALUATE TRUE | Avaliação de expressões |
Conclusão
O comando EVALUATE é a principal estrutura de decisão múltipla do COBOL. Ele substitui grandes blocos de IF aninhados, melhora a legibilidade do código e é amplamente utilizado em sistemas corporativos executados em mainframes IBM Z para implementar regras de negócio complexas de forma organizada e eficiente.