Certamente, você já utilizou o EVALUATE
em diversas situações em programas. Meu nome é Ivan Petrucci e irei te acompanhar ao longo dessa prática de COBOL!
Audiodescrição: Ivan Petrucci se descreve como uma pessoa de pele branca, com cabelo castanho-escuro curto e liso, olhos castanho-claros, barba castanho-escura e sobrancelhas castanho-escuras. Usa óculos de armação retangular preta, veste uma camisa preta lisa, e está sentado em uma cadeira preta em frente a uma parede clara iluminada em gradiente azul.
A ideia deste treinamento é apresentar algumas possibilidades de EVALUATE
, como:
- O
TRUE
;- O
THRU
;- O
EVALUATE
concatenado;- E o
ALSO
.
Vamos explorar todas as formas de expandir o uso do EVALUATE
para obter um código mais claro.
Convidamos você para participar dessa jornada!
Neste vídeo, vamos discutir o comando EVALUATE
e explorar suas possibilidades.
EVALUATE
EVALUATE TRUE
Para começar, temos o EVALUATE
tradicional, que é o EVALUATE TRUE
, onde comparamos a variável A
com a variável B
, e a variável C
com D
. Por fim, um bloco OTHER
é utilizado como exceção.
TRUE
:
EVALUATE TRUE
WHEN A > B
ACAO
WHEN C > D
ACAO
WHEN OTHER
ACAO
END-EVALUATE.
No EVALUATE TRUE
, qualquer condição válida será a primeira a ser executada.
Importante! Não devem existir condições iguais que possam ocorrer simultaneamente, como
A
maior queB
eB
menor queA
, por exemplo, pois ambas seriam verdadeiras.
EVALUATE
com variável como entradaPor outro lado, temos o EVALUATE
quando comparamos uma variável. Observe o exemplo de código abaixo, onde temos uma variável como entrada:
VARIAVEL
:
EVALUATE MEDIA
WHEN 10
ACAO
WHEN 7
ACAO
WHEN OTHER
ACAO
END-EVALUATE.
Usamos valores fixos, como 10, 7 e OTHER
. Dessa forma, se a nota for 10, a ação (ACAO
) pode ser aprovar; se for 7, indicar que haverá uma segunda prova; e o OTHER
indica recuperação.
Esses são os dois tipos mais básicos:
TRUE
e usando uma variável como entrada.
THRU
Vamos explorar outras possibilidades?
O THRU
funciona como um intervalo. Por exemplo: se temos uma ação que verifica se a nota é maior que 7, ela cobre de 7 a 10. Se a média for 12, ela será considerada, pois 12 é maior que 7.
VARIAVEL
:
EVALUATE MEDIA
WHEN >= 7
ACAO
WHEN >= 2
ACAO
WHEN OTHER
ACAO
END-EVALUATE.
No entanto, podemos utilizar o comando THRU
para definir um intervalo específico, como de 7 a 10, por exemplo, bem como para tratar números decimais, como de 2 até 6.99.
THRU
:
EVALUATE MEDIA
WHEN 7 THRU 10
ACAO
WHEN 2 THRU 6.99
ACAO
WHEN OTHER
ACAO
END-EVALUATE.
ALSO
para comparações múltiplasAlém disso, temos o comando ALSO
, que é muito interessante. Ele permite utilizar duas variáveis como premissas, como GRAU
e PROVA
no exemplo abaixo:
ALSO
:
EVALUATE GRAU ALSO PROVA
WHEN "MEDIO" ALSO "UNICAMP"
ACAO -> TREINEIRO
WHEN "MEDIO" ALSO "FMP"
ACAO -> APTO
WHEN "FUNDAMENTAL" ALSO ANY
ACAO -> NAO PODE FAZER
END-EVALUATE.
O GRAU
pode corresponder a ensino fundamental, médio ou superior, enquanto a PROVA
pode ser realizada por entidades como Unicamp ou FMP.
No exemplo acima, se a pessoa estudante é do ensino médio e faz a prova na Unicamp, ela pode ser treineira. Na FMP, mesmo no ensino médio, ela está apta, pois há aproveitamento de crédito.
O
ALSO
compara se o grau é médio e se a prova é na Unicamp ou na FMP.
Abaixo, há uma ramificação diferente: se a pessoa estudante é do ensino fundamental, ela não pode fazer a prova, independentemente da faculdade.
EVALUATE
Vamos entender na prática como aplicar THRU
e ALSO
? Separamos 5 exemplos para explicar o uso de EVALUATE
. No primeiro (arquivo Evaluate1.cob
), temos a média de três notas:
Evaluate1.cob
:
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCULA-MEDIA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOTA1 PIC 99V99 VALUE 0.
01 NOTA2 PIC 99V99 VALUE 0.
01 MEDIA PIC 99V99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
DISPLAY "Digite a primeira nota: ".
ACCEPT NOTA1.
DISPLAY "Digite a segunda nota: ".
ACCEPT NOTA2.
COMPUTE MEDIA = (NOTA1 + NOTA2) / 2.
DISPLAY "A media das notas e: " MEDIA.
EVALUATE TRUE
WHEN MEDIA = 10
DISPLAY "Parabens, voce foi aprovado com louvor!"
WHEN MEDIA >= 7 AND MEDIA < 10
DISPLAY "Aprovado"
WHEN MEDIA >= 2 AND MEDIA < 7
DISPLAY "Recuperacao"
WHEN MEDIA < 2
DISPLAY "Reprovado com nota menor que 2"
END-EVALUATE.
STOP RUN.
Após a entrada dos dados e o cálculo da média (MEDIA
), usamos EVALUATE
para verificar se a MEDIA
é igual a 10, entre 7 e menor que 10, entre 2 e menor que 7, ou menor que 2.
Nesse caso, se a média for igual a 10, a pessoa é aprovada com louvor; com a média entre 7 e 9.99, ela é aprovada; entre 2 e 6.99, ela faz recuperação; e com média menor que 2, é reprovada.
EVALUATE
com AND
e THRU
No arquivo Evaluate2-0.cob
, temos o mesmo programa, mas o EVALUATE
muda:
Evaluate2-0.cob
:
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCULA-MEDIA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOTA1 PIC 99V99 VALUE 0.
01 NOTA2 PIC 99V99 VALUE 0.
01 MEDIA PIC 99V99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
DISPLAY "Digite a primeira nota: ".
ACCEPT NOTA1.
DISPLAY "Digite a segunda nota: ".
ACCEPT NOTA2.
COMPUTE MEDIA = (NOTA1 + NOTA2) / 2.
DISPLAY "A media das notas e: " MEDIA.
EVALUATE MEDIA
WHEN 10
DISPLAY "Parabens, voce foi aprovado com louvor!"
WHEN 7 THRU 9.99
DISPLAY "Aprovado"
WHEN 2 THRU 6.99
DISPLAY "Recuperacao"
WHEN < 2
DISPLAY "Reprovado com nota menor que 2"
END-EVALUATE.
STOP RUN.
A MEDIA
10 garante aprovação com louvor. Comparando os dois códigos, usamos AND
no primeiro e THRU
no segundo. O THRU
facilita a visualização, pois cobre de 7 a 9.99, de 2 a 6.99, e menor que 2.
Nesse caso, não há risco de médias maiores que 10, pois comparamos de 10 para baixo.
O
THRU
faz umAND
implícito, mas é mais fácil de entender.
EVALUATE
para dias da semanaNo próximo exemplo, do arquivo Evaluate2-1.cob
, mudamos um pouco o foco: em vez de utilizar a média (MEDIA
), usamos um tipo de constante com ACCEPT
.
Nesse caso, fazemos o recebimento do dia da semana (day-of-week
) via ACCEPT
. Esse recurso é interessante, pois nos devolve o dia da semana, com 1 sendo segunda-feira, 2 terça-feira, até 7 domingo. Assim, recebemos na variável DIA-SEMANA
numérica a constante day-of-week
.
Na sequência, mostramos o dia da semana com DISPLAY
. Se o retorno for de 1 a 5, consideramos dia de trabalho; se for de 6 a 7, é dia de folga. Para alguns, vai até 6, sendo apenas domingo dia de folga.
Evaluate2-1.cob
:
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCULA-MEDIA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DIA-SEMANA PIC 9 VALUE 0.
PROCEDURE DIVISION.
INICIO.
ACCEPT DIA-SEMANA FROM day-of-week.
DISPLAY "Dia da Semana " DIA-SEMANA.
EVALUATE DIA-SEMANA
WHEN 1 THRU 5
DISPLAY "DIA DE TRABALHO"
WHEN 6 THRU 7
DISPLAY "FOLGA"
END-EVALUATE.
STOP RUN.
EVALUATE
para comparações de estadoNo quarto exemplo (Evaluate3.cob
), mudamos o foco novamente, alterando os exemplos para oferecer mais possibilidades de recursos, numéricos e textuais.
Evaluate3.cob
:
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCULA-MEDIA.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRODUTO PIC X(02) VALUE SPACES.
01 ESTADO PIC X(30) VALUE SPACES.
PROCEDURE DIVISION.
INICIO.
DISPLAY "Digite O nome do produto: ".
ACCEPT PRODUTO.
DISPLAY "Digite o estado onde sera entregue: ".
ACCEPT ESTADO.
EVALUATE ESTADO
WHEN "SP"
WHEN "RJ"
WHEN "MG"
DISPLAY "FRETE DISPONIVEL"
WHEN "ES"
DISPLAY "RETIRAR NA LOJA"
WHEN OTHER
DISPLAY "NAO ATENDEMOS"
END-EVALUATE.
STOP RUN.
Neste exemplo, consideramos o seguinte: o produto será vendido e a pessoa que vai comprar mora em determinado estado, como São Paulo, Rio de Janeiro ou Minas Gerais.
Portanto, perguntamos o nome do produto e o estado onde será entregue. Em seguida, usamos o recurso do EVALUATE
para verificar os estados. Se precisássemos comparar, por exemplo, São Paulo, Rio de Janeiro e Minas Gerais, poderíamos fazer isso com WHEN "SP" AND "RJ" AND "MG"
.
O
THRU
não se aplica a este caso, pois ele compara alfabeticamente.
Em situações onde há uma série de departamentos de uma empresa e queremos comparar todos de uma vez, podemos usar esse recurso: abrimos um WHEN
e, logo em seguida, abrimos outro.
O código entende que os 3 WHEN
vão virar a ação ao final. No caso, se o estado for São Paulo, Minas Gerais e Rio de Janeiro, o frete está disponível. Se for Espírito Santo, só é possível retirar na loja. Por fim, qualquer outro estado não é atendido. Esse recurso é bem interessante.
ALSO
O último exemplo, do arquivo Evaluate4.cob
, é um pouco mais complexo.
A ideia é a seguinte: determinada pessoa funcionária trabalha um número de anos na empresa (WS-TEMPO-TRABALHO
), tem um cargo (WS-CARGO
) e um salário (WS-SALARIO
).
A empresa quer dar um bônus para funcionários, mas há uma regra: para gerentes e diretores, os bônus são maiores, pois estão há mais tempo e têm cargos maiores; para demais funcionários, também há bônus, mas é necessário ter pelo menos um ano de empresa.
Com isso, temos as variáveis disponíveis. Na sequência, perguntamos o cargo, o salário da pessoa funcionária, e há quanto tempo ela trabalha na empresa. Com o comando ALSO
, se o cargo for DIRETOR
e a pessoa tiver mais de 5 anos na empresa, damos 15% de bônus.
Se o cargo for GERENTE
e a pessoa tiver mais de 3 anos na empresa, damos 10%. Não basta ser diretor, é preciso ter mais de 5 anos. Portanto, não basta ser gerente; é preciso ter um tempo de trabalho na empresa. Além disso, qualquer cargo com mais de 2 anos recebe 5% de bônus.
No final, mostramos o cargo, o tempo de trabalho, e o salário original.
Evaluate4.cob
:
IDENTIFICATION DIVISION.
PROGRAM-ID. BONUS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WS-TEMPO-TRABALHO PIC 99.
01 WS-CARGO PIC X(20).
01 WS-SALARIO PIC 9(5).
01 WS-SALARIO-AJUSTADO PIC 9(5).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY "Cargo: ".
ACCEPT WS-CARGO.
DISPLAY "Salario atual: ".
ACCEPT WS-SALARIO.
DISPLAY "Tempo de trabalho (em anos): ".
ACCEPT WS-TEMPO-TRABALHO.
EVALUATE WS-CARGO ALSO WS-TEMPO-TRABALHO
WHEN "DIRETOR" ALSO >= 5
COMPUTE WS-SALARIO-AJUSTADO = WS-SALARIO * 1.15
WHEN "GERENTE" ALSO >= 3
COMPUTE WS-SALARIO-AJUSTADO = WS-SALARIO * 1.10
WHEN ANY ALSO >=2
COMPUTE WS-SALARIO-AJUSTADO = WS-SALARIO * 1.05
END-EVALUATE.
DISPLAY " ".
DISPLAY "--------------".
DISPLAY "Cargo: : " WS-CARGO.
DISPLAY "Tempo de Trabalho: " WS-TEMPO-TRABALHO.
DISPLAY "Salario Original : " WS-SALARIO.
IF WS-SALARIO-AJUSTADO > 0
DISPLAY "Salario Ajustado : " WS-SALARIO-AJUSTADO
ELSE
DISPLAY "SEM BONUS !! Sorry"
END-IF.
STOP RUN.
Nessa etapa, podemos realizar alguns testes: uma pessoa diretora com 6 anos de trabalho ganha 15%; uma pessoa gerente com 4 anos ganha 10%; uma gerente com 2 anos de trabalho entra na regra de qualquer cargo e ganha 5% de bônus; já uma gerente com 1 ano de empresa não recebe bônus.
Qualquer pessoa com menos de 2 anos de empresa não terá salário ajustado (WS-SALARIO-AJUSTADO
). Se for ajustado, mostraremos o bônus recebido; no entanto, se a pessoa não tiver mais de 2 anos de trabalho na empresa, independentemente do cargo, não haverá bônus.
Vamos testar o arquivo Evaluate4.cob
executando o seguinte comando:
cobc -x -o bin\evaluate4.exe evaluate4.cob
No Prompt de Comando, enviaremos o comando abaixo:
EVALUATE4
Passaremos o cargo DIRETOR
; o salário de 10 mil reais (10000
); e o tempo de trabalho de 5
anos. O resultado é um salário ajustado de 11.500, com 15% de bônus aplicado.
Cargo:
DIRETOR
Salario atual:
10000
Tempo de trabalho (em anos):
5
Retorno do comando:
Cargo: : DIRETOR
Tempo de Trabalho: 05
Salario Original : 10000
Salario Ajustado : 11500
Podemos fazer outro teste com os seguintes dados:
Cargo:
DIRETOR
Salario atual:
10000
Tempo de trabalho (em anos):
3
Retorno do comando:
Cargo: : DIRETOR
Tempo de Trabalho: 03
Salario Original : 10000
Salario Ajustado : 10500
Nesse caso, a pessoa funcionária entra na classe dos 5%. Observe outro exemplo:
Cargo:
DIRETOR
Salario atual:
10000
Tempo de trabalho (em anos):
1
Retorno do comando:
Cargo: : DIRETOR
Tempo de Trabalho: 01
Salario Original : 10000
SEM BONUS !! Sorry
Como resultado de não entrar em nenhuma regra, a pessoa não tem direito ao bônus.
Com o ALSO
, podemos comparar duas variáveis, e utilizando o AND
, ampliamos as possibilidades.
Temos o EVALUATE
tradicional; o EVALUATE
com THRU
, que cria um intervalo; o EVALUATE
que testa várias condições; e o ALSO
. Assim, expandimos bastante as nossas possibilidades de uso do comandoEVALUATE
. No final, tudo é comparação. Podemos resolver com o comando IF
ou com EVALUATE
, mas este oferece opções mais nítidas para programar e entender.
Agradecemos a sua participação. Nos encontramos em outros conteúdos!
O curso Praticando Cobol: Decisões com evaluate possui 16 minutos de vídeos, em um total de 17 atividades. Gostou? Conheça nossos outros cursos de em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.