IF / ELSE e IF/ELSIF/ELSE em Perl

Neste tutorial de nosso curso de Perl, vamos aprender a usar as estruturas de controle:

  • IF / ELSE
  • IF / ELSIF / ELSE

O comando IF e ELSE

Em nosso tutorial passado, sobre o teste condicional IF, aprendemos que essa instrução permite que determinado trecho do código (dentro do IF), só seja executado mediante um teste, onde uma expressão deve resultar no valor VERDADE.

Porém, o código só executa se o teste for verdadeiro.
E se for falso? É aí que entra o comando ELSE.
O escopo dessa estrutura é:
if ( expressão ){
   # código caso a expressão
   # seja verdadeira
}else{
   # código caso a expressão
   # seja falsa
}

Exemplo de IF e ELSE em Perl

Vamos refazer o exercício:

  • Você foi contratado para criar um script para uma boate. Nele, você pergunta a idade da pessoa e se ela tiver 18 anos ou mais, avisa que ela pode entrar.

Vamos adicionar um comando else, que é acionado quando a pessoa tem menos de 18 anos, veja como fica:
#!/usr/bin/perl

print "Digite sua idade: ";
chomp($age=<STDIN>);

if($age>=18){
    print "Você é de maior, pode entrar\n";
}else{
    print "Você é de menor, não pode entrar\n";
}
Antes só aparecia uma mensagem para o usuário se ele fosse de maior, pois entrava no IF.
Agora, se ele for de menor, vai cair no ELSE e exibimos outra mensagem.

Veja que passamos a ter maior 'controle' sobre o fluxo de execução de nossos scripts em Perl.
Vamos refazer o outro exercício:

  • Você tem que criar um trecho de um código onde você vai pedir uma senha para o usuário, e vai permitir que ele entre no sistema somente se digitar a senha correta, que é rush2112.

#!/usr/bin/perl

print "Digite a senha: ";
chomp($password=<STDIN>);

if($password eq 'rush2112'){
    print "Senha correta, entrando no sistema...\n";
}else{
    print "Senha incorreta! Invasão cancelada\n";
}
Se você errar a senha, o script vai te pegar!

IF e ELSE aninhados

Uma técnica bastante comum em programação é usar teste condicional dentro de outros testes condicionais. Vamos criar um script que recebe dois números e diz qual o maior e o menor, ou se são iguais.

Primeiro, testamos se $a é maior $b, se for, ok, cai no primeiro IF e acaba.
Se não for, vai cair no ELSE.

Nesse ELSE, já sabemos que $a não é maior que $b, então ou são iguais ou $b é maior que $a.
Agora, lá dentro do ELSE, vamos usar outra estrutura, um IF perguntando se $b é maior que $a.
Se for, avisa isso e encerra o programa.

Se $b não for maior que $a (e $a já não era maior que $b), então são números iguais, e essa possibilidade cai num ELSE interno ao primeiro ELSE.

Veja como fica o código:
#!/usr/bin/perl

print "Primeiro numero: ";
chomp($a=<STDIN>);

print "Segundo numero : ";
chomp($b=<STDIN>);

if($a > $b){
    print "$a é maior que $b\n";
}else{
    if($b > $a){
        print "$b é maior que $a\n";
    }else{
        print "$a é igual a $b\n";
    }
}
O IF pode existir sozinho, como vimos no tutorial passado.
Mas para cada ELSE, existe seu IF.

Colocamos o código bem indentado, ou seja, espaçado de modo a vermos os pares de IF e ELSE.

IF / ELSIF / ELSE

Crie um programa que pede uma nota de 0 até 10 ao usuário.
Se for 9 ou mais, diga que ele tirou nota A.
Se for de 8 até 9, diga que tirou nota B.
Se for de 7 até 6, diga que tirou nota C.
Se for de 6 até 7, diga que tirou nota D.
Abaixo de 6 tira nota F.

Primeiro, testamos se a nota é maior ou igual a nove. Se for, damos nota A.
Se não for maior ou igual a 9, é porque é menor que 9, então vamos testar se é maior que 8, se for tirou nota B.

Se não for, é porque tirou abaixo de 8.
Testamos agora se é maior que 7, se for ele tirou nota C.

Se não é maior que 7, é menor. Então testamos se é maior que 6, se for dizemos que tirou nota D.
Por fim, se não cair em nenhum caso acima, cai no ELSE final e dizemos que tirou nota F, pois tirou menos que 6.

Veja como fica o código:
#!/usr/bin/perl

print "Sua nota: ";
chomp($grade=<STDIN>);

if($grade>=9){
    print "Nota A, parabéns.\n"
}else{
    if($grade>=8){
        print "Nota B\n";
    }else{
        if($grade>=7){
            print "Nota C\n";
        }else{
            if($grade>=6){
                print "Nota D\n";
            }else{
                print "Nota F\n";
            }
        }
    }
}
Note como ele vai 'quebrando' e indo pra direita.
Num script maior e mais complexo, isso vai ficando horrendamente feio.

Veja que o trecho: else{ if ... acontece mais de uma vez.
Podemos abreviar essas linhas para simplesmente: elsif (expressão)

Vamos ver como nosso código fica usando ELSIF:
#!/usr/bin/perl

print "Sua nota: ";
chomp($grade=<STDIN>);

if($grade>=9){
        print "Nota A, parabéns.\n"
}elsif($grade>=8){
        print "Nota B\n";
}elsif($grade>=7){
        print "Nota C\n";
}elsif($grade>=6){
        print "Nota D\n";
}else{
        print "Nota F\n";
}
Bem mais bonito de se ver, entender e organizado, não concorda?

Nenhum comentário:

Veja também: