Os laços de repetição, também conhecidos como estruturas de iteração, são ferramentas fundamentais na programação. Eles nos permitem executar um bloco de código repetidamente, economizando tempo e tornando o código mais conciso. Nesta página, vamos explorar os dois tipos mais comuns: for e while, com exemplos práticos em JavaScript.
forO laço for é ideal quando sabemos de antemão quantas vezes queremos que o código se repita. Ele é composto por três partes principais dentro dos parênteses, separadas por ponto e vírgula:
for (inicialização; condição; incremento/decremento) {
// Código a ser executado repetidamente
}
for: Contando de 1 a 5Este exemplo demonstra como o laço for pode ser usado para imprimir números de 1 a 5 no console.
for (let i = 1; i <= 5; i++) {
console.log("Número: " + i);
}
/*
Saída no console:
Número: 1
Número: 2
Número: 3
Número: 4
Número: 5
*/
Neste exemplo:
let i = 1: Inicializa a variável i com 1.i <= 5: A condição é que o laço continue enquanto i for menor ou igual a 5.i++: Incrementa i em 1 a cada iteração.for: Iterando por um ArrayO laço for também é muito útil para percorrer elementos de um array.
let frutas = ["Maçã", "Banana", "Laranja", "Uva"];
for (let i = 0; i < frutas.length; i++) {
console.log("Eu gosto de " + frutas[i]);
}
/*
Saída no console:
Eu gosto de Maçã
Eu gosto de Banana
Eu gosto de Laranja
Eu gosto de Uva
*/
whileO laço while é usado quando não sabemos de antemão quantas vezes o código precisa se repetir. Ele continua executando um bloco de código enquanto uma determinada condição for verdadeira. A condição é avaliada antes de cada execução do bloco.
while (condição) {
// Código a ser executado repetidamente
// É crucial ter algo dentro do bloco que mude a condição para 'false'
// para evitar um loop infinito!
}
while: Contando de 1 a 5O mesmo exemplo de contar de 1 a 5 pode ser implementado com while.
let contador = 1;
while (contador <= 5) {
console.log("Contador: " + contador);
contador++; // Lembre-se de incrementar a variável de controle!
}
/*
Saída no console:
Contador: 1
Contador: 2
Contador: 3
Contador: 4
Contador: 5
*/
Neste exemplo:
let contador = 1: Inicializamos a variável contador antes do laço.while (contador <= 5): A condição é que o laço continue enquanto contador for menor ou igual a 5.contador++: Incrementamos contador manualmente dentro do corpo do laço para garantir que a condição eventualmente se torne falsa.while: Loop com Validação de Entrada (Simulado)Um uso comum para o while é para validar entradas de usuário, repetindo a solicitação até que uma entrada válida seja fornecida. Para demonstrar isso sem interação real do usuário no HTML, simularemos a entrada.
let idade = 0; // Valor inicial inválido
// Função para simular a obtenção de idade (em um cenário real, seria 'prompt' ou 'input')
const obterIdadeSimulada = (tentativaAtual) => {
if (tentativaAtual === 1) return 10; // Primeira "tentativa" (inválida)
if (tentativaAtual === 2) return 16; // Segunda "tentativa" (inválida)
if (tentativaAtual === 3) return 20; // Terceira "tentativa" (válida)
return 0; // Caso fallback
};
let tentativa = 0;
while (idade < 18) {
tentativa++;
idade = obterIdadeSimulada(tentativa); // Simula a obtenção de entrada do usuário
if (idade < 18) {
console.log("Você precisa ter pelo menos 18 anos para continuar. Sua idade: " + idade + ". Tentativa " + tentativa + ": Por favor, insira novamente.");
}
}
console.log("Idade válida inserida: " + idade + ". Bem-vindo!");
/*
Saída no console (simulada):
Você precisa ter pelo menos 18 anos para continuar. Sua idade: 10. Tentativa 1: Por favor, insira novamente.
Você precisa ter pelo menos 18 anos para continuar. Sua idade: 16. Tentativa 2: Por favor, insira novamente.
Idade válida inserida: 20. Bem-vindo!
*/
Neste exemplo, o laço while continua "pedindo" a idade (simuladamente) até que um valor maior ou igual a 18 seja fornecido, demonstrando um cenário de validação.
for ou while?for quando você sabe o número exato de iterações ou quando precisa iterar sobre uma sequência (como um array) com um contador claro.while quando o número de iterações é desconhecido e o laço deve continuar até que uma condição específica seja atendida (como uma validação de entrada, leitura de um arquivo até o fim, etc.).Ambos os laços são poderosos e, em muitos casos, um pode ser reescrito usando o outro. A escolha geralmente se resume à clareza e legibilidade do código para a situação específica.