Criando Aplicativos para Android: Estruturas de Desvio de Fluxo

android-programador  

Este artigo tem por objetivo ser uma continuação do segundo tutorial sobre desenvolvimento de aplicativos para Android. O código e projeto do aplicativo será o mesmo, então se você não conferiu a etapa 2 sugiro você fazer isso primeiro. O aplicativo do exercício anterior funciona legal, mas ele tem um problema: Caso ambos os campos ou algum em específico ficar vazio o aplicativo apresenta um erro de lógica. Para evitar este erro vamos utilizar umas das principais estruturas de controle da programação,  o if e else.

Aprendendo a utilizar algumas estruturas de fluxo você poderá começar a desenvolver aplicativos mais interessantes, elaborados e desafiadores.

Este artigo tem caráter introdutório mas serve de base para você se familiarizar com alguns conceitos básicos da linguagem Java e com isso você estará apto para ir além. Neste artigo será abordado o controle de desvio de fluxo if e sua variante if e else (sendo que temos também o switch que substitui o uso de vários else if). No desenvolvimento Android todos os controles de fluxo, operadores lógicos e operadores de comparação são os mesmos da linguagem Java.

Operadores de comparação

Operadores de comparação atuam sobre valores de tipos numéricos e retornam valores booleanos, true (verdadeiro) ou false (falso). O operador == também também pode ser utilizado para comparar outros tipos de dados, inclusive objetos.

Operador   Significado
== igual a
!= diferente de
< menor que
> maior que
<= menor ou igual a
>= maior ou igual a
Exemplo: [java] int a = 1; int b = 1; if (a == b) { // instrução } [/java]

Como Comparar Strings no Java

No texto explicativo dos operadores de comparação está em negrito "tipos numéricos" isto é para deixar claro que os operadores acima só servem para comparar números. Mas se você tem duas strings (texto) e deseja saber se elas são iguais ou diferentes o que fazer? Esta discussão é importante, pois os programadores iniciantes tendem a utilizar o operador == ou o operador != e com isso dá erro. O que fazer? Existe um método especial da classe String chamado de equals() que compara cada caractere de uma string e retorna verdadeiro ou falso dependendo dos strings serem iguais ou diferentes.

Exemplo:

String nome1 = "Lucas";
String nome2 = "Jose";

if (nome1.equals(nome2)) {
//SE nome1 for IGUAL ao nome2 executa o código dentro deste IF // instrução
}

Operadores Lógicos

Estes operadores atuam sobre valores booleanos e retornam valores booleanos, true ou false e são costumeiramente utilizados nas estruturas de desvio de fluxo para realizar comparações entre dois ou mais valores / variáveis.

Operador Significado Exemplo Explicação
&& E ("logical AND") a && b retorna true se a e b forem ambos true. Senão retorna false. Se a for false, b não é avaliada.
& E ("boolean logical AND") a & b retorna true se a e b forem ambos true. Senão retorna false. Ambas expressões a e b são sempre avaliadas.
|| OU ("logical OR") a || b retorna true se a ou b for true. Senão retorna false. Se a for true, b não é avaliada.
| OU ("boolean logical inclusive OR") a | b retorna true se a ou b for true. Senão retorna false. Ambas expressões a e b são sempre avaliadas.
^ OU EXCLUSIVO ("boolean logical exclusive OR") a ^ b retorna true se a for true e b for false ou vice-versa. Senão retorna false
! NÃO ("logical NOT") !a retorna true se a for false. Senão retorna false

Estruturas de Desvio de Fluxo

Estas estruturas desviam um certo trecho de código para uma outra parte, ao invés de seguir o fluxo normal para a próxima linha de código. Na imagem abaixo podemos ver o funcionamento da estrutura IF. condicoes-em-java Exemplo
if( <condição> ){
<comando 1>;
<comando 2>;
}
else{
<comando 3>;
<comando 4>;
}

 

Colocando a Mão na Massa

Primeiro vamos executar nosso aplicativo "NomeIdade" que criamos. Quando ele abrir no emulador vamos deixar o campo nome e idade vazios e ver o que acontece quando clicar em "Ver Resultado". android-app-camos-vazios

Como podemos ver a frase apresentada está incompleta. Para evitar que isso aconteça vamos fazer algumas validações para certificar se o usuário informou seu nome e idade. Caso negativo uma mensagem de alerta será apresentada para notificar o usuário que os campos são obrigatórios. A alteração do código será somente no método "nomeIdade" os comentários no código do tutorial 2 foram removidos para não confundir somente ficaram os comentários para esta atividade.

public void nomeIdade(View view)
{

// acessando e adicionando as variavés os valores de entrada
// do usuário.
EditText edtNome = (EditText) findViewById(R.id.edt1);
EditText edtIdade = (EditText) findViewById(R.id.edt2);

// Adicioando os textos as variáveis do tipo string
String nome = edtNome.getText().toString();
String idade = edtIdade.getText().toString();

// SE nome estiver vazio OU idade estiver vazia entra dentro do desvio.
if(nome.equals("") || idade.equals(""))
{
new AlertDialog.Builder(this)
.setTitle("Alerta")
.setMessage("Você deve preencher todas as informações!!!")
.setNeutralButton("Ok", null)
.show();
}

// o else só existe se tiver o IF. Ele só é executado se o IF for falso.
// ou seja caso os dois camos acima estejam preenchidos.
else
{
new AlertDialog.Builder(this)
.setTitle("Resultado")
.setMessage("O seu nome é: " + nome + " e você tem "
+ idade + " anos.")
.setNeutralButton("Ok", null)
.show();
}

No código acima como é possível notar a mensagem de alerta é genérica. Como um próximo exercício tente fazer o seguinte: Mostrar uma mensagem de erro para o campo nome e outra mensagem de erro para o campo idade. Elabore um meio para não repetir o código do AlertDialog, utilize outra variável String para armazenar as mensagens de alerta, esta é a dica, agora volte ao trabalho! :)