Categorias
Introdução à Programação para Bioinformática com Perl

Comandos condicionais

Capítulo 2

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:

Nota do autor
Prefácio

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

Epílogo
Referências bibliográficas
Sobre os autores

Por favor, nos cite:

MARIANO, DIEGO CÉSAR BATISTA; de MELO-MINARDI, R. C. . Introdução à Programação para Bioinformática com Perl. 1. ed. North Charleston, SC (EUA): CreateSpace Independent Publishing Platform, 2016. v. 2. 200p .

Por Diego Mariano

Doutor em Bioinformática pela Universidade Federal de Minas Gerais com atuação na área de ciência de dados e aprendizado de máquina aplicados ao aperfeiçoamento de enzimas usadas na produção de biocombustíveis. Mestre em Bioinformática, também pela UFMG, atuando na área de desenvolvimento de sistemas Web para montagem de genomas. Atualmente realiza estágio pós-doutoral no Departamento de Ciência da Computação da UFMG com foco em desenvolvimento de sistemas Web para Bioinformática, análise exploratória e visualização de dados. Tem conhecimentos nas linguagens: PHP, JavaScript, Python, R, Perl, HTML, CSS e SQL.