Estruturas condicionais (if e else), laços de repetição (while e for) em Java
condicionais e laços de repetição

Estruturas condicionais (if e else), laços de repetição (while e for) em Java

Nessa aula você vai aprender definitivamente com exemplos simples e práticos de como funcionam as operações mais básicas que você pode executar dentro de uma linguagem de programação: decisão (if e else) e repetição (while e for).

Lembra quando nas aulas de Inglês você começava sempre pelos verbos to be (ser/estar) e também por frases como “the book is on the table”. Parece algo ridículo, porém tudo tem um começo certo? O seu começo nas linguagens de programação precisa de um ponto de partida, sendo assim, apresento a você as estruturas condicionais e os laços de repetição – o verbo to be da programação.

Se você realmente sonha em ser um programador de sucesso, não tem muita escolha, você precisa dominar a lógica por trás dessas estruturas e entender profundamente como usá-las em qualquer situação. Essas estruturas são utilizadas todo momento ao construir um programa (quando você usa uma linguagem imperativa como o Java, C#, etc.). Essas estruturas são tão comuns que quando você compreende como usá-las a sensação é que todas as linguagens de programação são iguais. Por exemplo, o Java possui muitas similaridades com outras linguagens (como o C#) e adota estruturas de decisão e repetição bastante parecidas. Essas linguagens ganharam até um “apelido”, chamam elas de “C like”, isso justamente por serem muito parecidas com a linguagem C.

Nosso objetivo aqui é mostrar várias estruturas de decisão e repetição e como elas podem ser um pouco diferentes em cada linguagem, mesmo que no fundo o conceito seja o mesmo.


Estruturas condicionais (if e else)

Essas estruturas existem para que o programador possa desviar o fluxo de execução de um código relacionado com algum ponto de decisão. Ou seja, o programador tem o poder de controlar quais são as tarefas executadas de acordo com decisões do usuário, permissões etc. 

Pense no seguinte exemplo, você possui um site e precisa emitir uma mensagem ao usuário: “se você concorda com os termos de utilização e tem mais de 18 anos clique em “acessar o site”, se não, clique em “sair”. Essa interface está presente em muitos websites que precisam indicar que o seu conteúdo é sensível e claramente expressa uma decisão: se você aceita os termos, entre, se não, não acesse. 

Veja a seguir como você pode escrever uma estrutura condicional:

if( condição ) {
	// ação se a condição for verdadeira
}else{
	// ação se a condição for falsa
}

Você pode criar uma estrutura, por exemplo, para verificar se o seu usuário é maior de idade:

if( idade > 18 ) {
	ESCREVA("Você é maior de idade");
}else{
	ESCREVA("Você é menor de idade")
}

Se você estiver escrevendo um programa usando a linguagem Java, você escreveria:

public class Teste{
	public static void main(String Args[]){
		int idade = 19;
		if (idade >= 18 ){
			System.out.println("Você é maior de idade!");
		}else{
			System.out.println("Você é nem pode dirigir ainda :)");
		}
	}
}

Se você estiver no Python, você economizaria algumas linhas e escreveria:

idade = 19
if idade >= 18:
	print("você é maior de idade")
else:
	print("você ainda é um bebê")

Você percebeu que mesmo sendo linguagens completamente distintas você ainda consegue ler o código tranquilamente? Percebeu que a lógica por trás disso é sempre igual?

Isso é muito bom! Isso foi o resultado de vários anos de evolução das linguagens e de pessoas que pensaram o seguinte: “vamos facilitar as coisas e vamos usar estruturas parecidas, porém mais eficientes.”

Quer saber como são os laços de repetição em outras linguagens?

Se liga nesse exemplo:

Se você clicar você vai descobrir a verdade.

Sabe como eu fiz isso? Simples usei apenas um if else:

if ( idade.value >= 18){
    alert("Ei, " + nome.value+ ", Sabia que você é maior de idade?");
    result.innerHTML = "Parabéns, só não vá fazer besteira.";
}else{
    alert("Ei, " + nome.value + ", você ainda é muito novo, mas tem um futuro brilhante.");
    result.innerHTML = "Comece a programar agora que seu futuro é brilhante!";
}

Essa estrutura é mais conhecida como “if e else”, mas na verdade o “else” é opcional. É possível também que você crie uma estrutura de decisão que não faz nada quando a situação não acontece. Veja um exemplo bastante simples:

if( numeroDeContatos > 100 ) {
	System.out.println("Sua agenda está cheia");
}

Mas cuidado, não é permitido existir um else sem um If antes.

// não permitido!!
else{
	System.out.println("Você é menor de idade")
}

2.1 – Operadores válidos

Para usar o if/else o principal elemento que você deve estar atento é a condição usada, para isso, existem operadores bastante específicos que podem ajudar muito. Veja abaixo uma tabela de operadores válidos em Java:

Nome do operadorSímbolo
Igualdade==
Desigualdade!=
Negação!
Maior que>
Menor que<
Maior igual>=
Menor igual<=

Para entender melhor como usar esses operadores, considere por exemplo que eu quero saber se uma pessoa vendeu mais de 200 mil reais em mercadorias, o seu if ficaria mais ou menos assim:

if (mercadoria.valor > 200000){
   // alguma ação
}

Podemos concluir que quando aplicamos esses operadores sempre teremos uma resposta verdadeira ou falsa (por exemplo: 6 > 3; 0 != 2; 3 >= 1).

2.2 – Conectores lógicos

Em diversas linguagens de programação você encontra uma funcionalidade chamada “conectores lógicos” que tem a função de conectar proposições.

Conector E (&&)

Vamos a um exemplo simples:

Imagine que você precisa avaliar se uma pessoa pode ou não entrar em um clube noturno. Para isso você deve avaliar: 1) se a pessoa é maior de idade; 2) se ela pagou a taxa de entrada; 3) se ela não está na lista negra da casa noturna. Sendo assim, perceba que não adianta a pessoa satisfazer apenas uma das exigências, ela precisa necessariamente satisfazer todas de uma vez.

Nesse caso nós encontramos um caso para aplicarmos o conector lógico E (representado no Java por “&&”). Se fossemos codificar isso ficaria mais ou menos assim:

if (maiorDeIdade && taxaPaga && !estaNaListaNegra){
    // pode entrar no clube
}

Perceba que a condição “estaNaListaNegra” está com o símbolo de exclamação no começo. Isso faz sentido quando pensamos que nós não queremos alguém que está na lista negra do clube entrando na festa, portanto, a exclamação diz o seguinte: “não está na lista negra”.

Conector OU ( || )

O conector OU faz o papel contrário do conector E, ou seja, ao invés de obrigar que todos os atributos sejam cumpridos ele avalia apenas se um ou outro foi cumprido.

Veja o exemplo:

Imagine que você possui um sistema fidelidade em sua loja que premia os clientes mais fiéis. No mês de aniversário todos os clientes que 1) compraram mais de 500 reais na sua loja ou 2) fizeram ao menos 1 compra em todos os meses do ano ganharão um brinde. Perceba que nesse caso não existe a obrigatoriedade de cumprir os dois requisitos, portanto, a função OU é bastante adequada nesse caso.

Se você fosse codificar isso ficaria mais ou menos assim:

if (atingiu500EmCompras || fez1CompraMensal){
    // ganha o brinde
}

3- Laços de Repetição (while e for)

Computadores são especialistas em repetir tarefas por quanto tempo você quiser. Imagine por exemplo que você queira mandar um e-mail para todos os seus contatos divulgando um produto. Essa tarefa seria bastante trabalhosa caso você precisasse escrever todos esses e-mails um por um. 

Os laços de repetição são estruturas criadas para realizar essa repetição de ações que muitas vezes é bastante desgastante para nós, humanos. Qualquer laço precisa ter uma condição de parada válida, ou seja, um ponto de controle no qual sua execução termina. Caso contrário, esse laço irá entrar em um loop infinito e seu programa nunca terminará sua execução.

Na linguagem Java existem 2 principais tipos de laços de repetição: while e for. O while é um comando bastante simples que exige apenas que você informe o ponto de parada. Veja um exemplo a seguir:

int contador = 0;
while (contador < 10) { 
	System.out.println("Eu amo bacon!");
    contador = contador + 1;
}

Um dos grandes problemas do while é que geralmente a condição de parada (contador) é declarada fora dessa estrutura, obrigando o programador a escrever mais código. Para resolver esse problema, o FOR utiliza um contador interno que pode ser declarado dentro do próprio laço. Veja um exemplo a seguir:

for(int i = 0 ; i < 10; i++ ) {
	System.out.println("Eu amo bacon");
}

Outra estrutura que pode ser utilizada em Java é o laço do-while. Ele possui um funcionamento semelhante a o laço while, porém, o código é executado ao menos uma vez antes de ser repetido. Veja um exemplo:


int i = 0;
do{
	System.out.println("Eu amo muito bacon");
    i++;
}while( i < 10 );

É importante lembrar que essas estruturas devem ser utilizadas pelo programador e podem ser combinadas (aninhadas). Sendo assim, o programador pode escrever vários laços de repetição, um dentro do outro e também combinar com cláusulas condicionais. 

Veja o exemplo abaixo:

for ( int i = 0 ; i < 10 ; i++){
	for( int j = 0 ; j < 10; i++){
    	System.out.println("vou imprimir 100 vezes");
    }
}

Beleza, mas e ai, o que eu posso fazer com isso?

A resposta é: Qualquer Coisa.

Tá bom, eu sei que não é a melhor resposta do mundo, mas é verdade. Os laços eles são apenas uma ferramenta e são altamente versáteis, permitindo que você realize qualquer tarefa repetitiva por meio deles.

Vamos a um exemplo prático, vamos desenvolver um mini-jogo de matemática. Funciona assim, você digita um número aqui em baixo e eu te mostro uma sequência… será que você consegue descobrir que sequência é essa?

Se você descobriu qual é a sequência, coloca nos comentários sua resposta (ou então o código).

Nesse exemplo você pode ver que a linguagem de programação é muito poderosa e pode repetir ações infinitamente. Portanto, você pode imaginar qualquer tarefa repetitiva que você faz e tentar automatizá-la. É claro que nem tudo são flores, existem tarefas muito difíceis de automatizar, mas com o tempo a gente chega lá.

Na próxima aula, vamos começar a compreender como funcionam os vetores.

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e a forma com que ela pode transformar vidas!

Deixe uma resposta