Este conteúdo faz parte do livro “Introdução à Programação para Bioinformática com Perl“. Você pode adquirir a versão impressa desse livro aqui ou a versão para Kindle aqui. Para nos citar, consulte este link.
Aprendemos no capítulo anterior como determinar se um número é par ou ímpar utilizando o operador módulo, entretanto seria possível avisar ao usuário se um determinado número digitado é par ou ímpar? Sim, isso é possível através dos comandos condicionais if, elsif e else.
Comandos if e else
O comando if (na tradução literal para o português “se”) realiza testes condicionais, permitindo que blocos de comando sejam executados caso uma condição testada seja comprovada. Uma vez que todos os testes sejam realizados e nenhum for comprovado, o bloco de dados da instrução else, quando declarado, é executado.
Podemos compreender então que os comandos condicionais analisam se uma determinada condição imposta é verdadeira ou falsa, e permitem que decisões diferentes sejam tomadas de acordo com os dados validados. Observe o exemplo:
#Titulo: par_ou_impar.pl
#Funcao: determinar se um numero eh par ou impar
# Recebe um numero digitado pelo usuario
print "Digite um numero: ";
my $num = <STDIN>;
my $resto = $num % 2;
# Testa se o numero eh par ou impar
if ($resto == 0){
print "O numero digitado eh par.\n";
}
else{
print "O numero digitado eh impar.\n";
}
Para comparar o valor presente na variável $resto foi necessário o uso do operador relacional “==”. Nesse exemplo, verificamos se o resto da operação é igual a zero. Caso for, o programa informa que o número digitado é par. Caso não for, o programa informa que o número digitado é ímpar.
Comando elsif
Diferente de outras linguagens de programação, que usam o else if ou elif, em Perl, blocos condicionais encadeados são aninhados através da palavra reservada elsif. O comando elsif permite que uma nova condição seja testada caso a condição anterior não tenha sido validada, e assim permite que sejam utilizados quantos testes forem necessários.
#Titulo: if_elsif_else.pl
#Funcao: determinar se um numero eh positivo ou negativo
# Recebe um numero digitado pelo usuario
print "Digite um numero: ";
my $num = <STDIN>;
if ($num == 0){
print "Numero igual a zero.\n";
}
elsif ($num > 0){
print "Numero maior que zero.\n";
}
else{
print "Numero menor que zero.\n";
}
O script apresentado anteriormente recebe um número digitado pelo usuário, e a seguir, faz três comparações: (i) se o número é igual a zero; (ii) se o número é maior que zero; e (iii) se nenhuma das condições anteriores foi atendida, ou seja, o número é menor do que zero.
Entretanto, esse script apresenta um erro grave. O que aconteceria se o usuário não digitasse um número? A resposta é que o programa exibiria a mensagem indicando que o número é igual a zero. Isso ocorre pois Perl comparará a string como se fosse uma variável numérica nula.
Ao desenvolver um programa, o programador deve sempre prever possíveis erros dos usuários e tratá-los antes que ocorram. A seguir vamos corrigir o nosso script para que caso um número não seja digitado o programa seja interrompido.
Para isso vamos utilizar o módulo de avisos. Declarando o comando “use warnings;” em qualquer ponto antes das comparações, o script enviará ao usuário uma mensagem ao usuário indicando que uma variável não numérica está sendo comparada com uma numérica, entretanto o script ainda será executado. Usando o comando “use warnings FATAL => qw( numeric uninitialized );”, forçamos o script a retornar um erro fatal caso uma variável textual seja utilizada em comparações numéricas. Lembre-se que para comparar strings deve-se utilizar o operador “eq”.
#Funcao: determinar se um numero eh positivo ou negativo
use warnings FATAL => qw( numeric uninitialized );
# Recebe um numero digitado pelo usuario
print "Digite um numero: ";
my $num = <STDIN>;
if ($num == 0){
print "Numero igual a zero.\n";
}
elsif ($num > 0){
print "Numero maior que zero.\n";
}
else{
print "Numero menor que zero.\n";
}
Organização de condições com parênteses
No exemplo a seguir pediremos que o usuário digite sua idade e em seguida tentaremos decidir se o usuário pode votar ou não.
use warnings;
print "Digite sua idade: \n";
my $idade = <STDIN>;
if (($idade > 0) and ($idade < 16)){
print "Voce nao pode votar!\n";
}
elsif ((($idade >= 16)and($idade < 18))or($idade >= 70)){
print "Voto opcional!\n";
}
elsif (($idade >= 18) and ($idade < 70)){
print "Voto obrigatorio!\n";
}
else{
print "Idade invalida!\n";
}
Observe que inicialmente recebemos a idade do indivíduo através do operador STDIN. A seguir verificamos se o indivíduo possui mais de que 0 e menos de que 16 anos. Veja como os parênteses são utilizados para organizar o código: há parênteses delimitando as condições “(idade >= 0)” e “(idade < 16)”, e um par parênteses que delimita a interligação entre as duas condições “((idade >= 0) and (idade < 16))” localizados nas extremidades do comando if.
Observe que na condição a seguir são utilizados três parênteses no início. As condições “((idade >= 16) and (idade < 18))” só serão válidas se o valor presente em idade atender a ambas. O comando condicional ainda seria válido se “(idade >= 70)”, devido ao uso do operador “or”.
Ao final utilizamos o comando else para imprimir uma mensagem caso o usuário digite algum valor que não seja um número inteiro positivo. Um bom código deve prever possíveis erros de execução pelo usuário e imprimir mensagens de aviso.
Construindo uma calculadora
Agora que aprendemos a utilizar comandos condicionais, podemos utilizá-los junto aos operadores matemáticos e construir uma aplicação um pouco mais avançada: uma calculadora.
Primeiramente devemos pensar: o que nossa calculadora deve fazer?
Vamos definir o algoritmo do programa. Nosso script deve:
1. Exibir mensagens ao usuário;
2. Receber dois números digitados pelo usuário e a operação requisitada;
3. Informar que nossa calculadora deve fazer apenas operações de (1) soma, (2) subtração, (3) divisão e (4) multiplicação;
4. Realizar as operações matemáticas;
5. Exibir o resultado na tela.
# Calculadora
my $num1;
my $num2;
my $operador;
my $operacao;
print "CALCULADORA";
print "\n\n";
print "Digite o primeiro numero: ";
chomp($num1 = <STDIN>);
print "\n";
print "Digite a operacao desejada: \
1 para soma \
2 para subracao \
3 para divisao \
4 para multiplicacao: ";
chomp($operador = <STDIN>);
print "\n";
print "Digite o segundo numero: ";
chomp($num2 = <STDIN>);
# Determinando qual o operador foi utilizado
if ($operador == 1){
$operacao = $num1 + $num2;
}
elsif ($operador == 2){
$operacao = $num1 - $num2;
}
elsif ($operador == 3){
$operacao = $num1 / $num2;
}
elsif ($operador == 4){
$operacao = $num1 * $num2;
}
else {
print "Operador invalido. Digite 1, 2, 3 ou 4.";
}
print "\n";
print "Resultado: ";
print $operacao;
print "\n";
Observe que inicialmente recebemos os valores digitados pelo usuário nas variáveis $num1 e $num2. A função chomp é chama-da diretamente quando o programa recebe as entradas de dados para remover quebras de linhas. Recebemos também uma variável $operador e definimos que ela pode ter os valores 1 para soma, 2 para subtração, 3 para divisão e 4 para multiplicação. Definimos valores numéricos, pois se inseríssemos os símbolos das opera-ções (“+”, “-“, “*” e “/”) poderíamos ter problemas com caracte-res especiais. A seguir, utilizamos os comandos condicionais para avaliar a variável $operador e definir qual a operação foi requisi-tada. O comando if foi utilizado apenas na primeira condição, em seguida, os comandos elsif foram utilizados, indicando dependên-cia de que condições anteriores não tenham sido cumpridas. Por fim, utilizamos o comando else para avaliar se nenhum dos requi-sitos anteriores for cumprido.
Durante todo o código, o comando print “\n” foi bastante utiliza-do para formatar as informações exibidas ao usuário. Use quebras de linha sempre que necessário.
Quer aprender mais? Conheça nossos cursos profissionalizantes à partir de R$19,99:
Capítulo 1
Introdução ao Perl
Capítulo 2
Comandos condicionais
Capítulo 3
Strings
Capítulo 4
Arrays
Capítulo 5
Laços de repetição
Capítulo 6
Manipulando arquivos
Capítulo 7
Sub-rotinas
Capítulo 8
“O guia de sobrevivência para expressões regulares em Perl”
Capítulo 9
Introdução ao BioPerl
Capítulo 10
Sequências
Capítulo 11
BLAST
Capítulo 12
Estruturas de proteínas
Capítulo 13
Hierarquia do BioPerl