GIVEN e WHEN teste condicional em Perl

Neste tutorial de nosso curso de Perl, vamos aprender como usar o teste condicional given.

O teste condicional GIVEN

Se você já estudou outras linguagens de programação, como C, C++ ou Java, por exemplo, deve estar ciente do comando switch, que funciona como um montão de IF e ELSE.

Veja nosso tutorial sobre IF, ELSIF e ELSE em Perl.
Estude novamente o último exemplo, sobre testes condicionais aninhados, onde colocamos diversos IF e ELSE dentro de outros IF e ELSEs.

Basicamente, temos um valor ou expressão, em que queremos pegar seu resultado e comparar com uma série de possibilidades e rodar um determinado código específico para aquele resultado.

A sintaxe do given when é a seguinte:
given (expression){
        when(value1) { #código caso
                       #expression = value1 
                     }
        when(value2) { #código caso
                       #expression = value2 
                     }
        when(value3) { #código caso
                       #expression = value3 
                     }
        default { #código caso
                  #expression seja
                  #qualquer outro valor 
                }
} 

Como funciona GIVEN e WHEN em Perl

Vamos dar para o given alguma expressão, como um teste condicional que resulte em algum valor, booleano ou não, a informação é expression.

Note que cada when tem um valor nele, dentro dos parêntesis de cada um, o Perl sai testando expression com todos esses valores dentro dos when.

Quando ele encontra um value que bate com expression, ou seja, são iguais, ele executa o código daquele when.

Se não encontrar nenhum when com valor que dá 'match' com o valor do given, ele executa o código do default.

Exemplos de uso de GIVEN e WHEN em Perl

O seguinte código pede um número ao usuário, de 1 até 7 e imprime na tela o nome, por extenso, do dia da semana. Caso digite errado, cai no default, que avisa o problema.
#!/usr/bin/perl

use experimental qw( switch );

print "Dia da semana: ";
chomp($day=<STDIN>);

given ($day){
        when(1) {print "Domingo\n";}
        when(2) {print "Segunda-feira\n";}
        when(3) {print "Terça-feira\n";}
        when(4) {print "Quarta-feira\n";}
        when(5) {print "Quinta-feira\n";}
        when(6) {print "Sexta-feira\n";}
        when(7) {print "Sábado\n";}
        default {print "Dia inválido\n";}
}       

Note algumas coisas.
Primeiro, isso é possível fazer com IF e ELSE, porém com eles fica mais longo e desorganizado.
Segundo, o comando GIVEN ainda é experimental, no Perl, portanto, por hora, evite usar sempre que puder.

Vamos criar, agora, um mini tradutor, onde o usuário vai digitar a cor em portuguesa e vamos exibir a tradução, em inglês:
#!/usr/bin/perl

use experimental qw( switch );

print "Cor: ";
chomp($color=<STDIN>);

given ($color){
        when("vermelho") {print "Red\n";}
        when("azul") {print "Blue\n";}
        when("amarelo") {print "Yellow\n";}
        when("verde") {print "Green\n";}   
        default {print "Cor não faz parte do banco de dados\n";}
}       

Foda esse Perl, não é?

Referências

https://www.perlmonks.org/?node_id=1078449
https://www.perltutorial.org/perl-given/

Nenhum comentário:

Veja também: