Laços de Repetição em JavaScript: for, while e do while (Guia Completo para Iniciantes)

 

Bem-vindo(a) a mais um post da trilha JavaScript!



Neste post você vai aprender como fazer o JavaScript repetir tarefas automaticamente usando os laços de repetição. Vamos explorar o for, while, do while, for...of e for...in, entendendo quando e como usar cada um com exemplos práticos e reais.

Caso queira acompanhar a trilha completa, confira os posts anteriores:

  • 📌 Variáveis e Tipos de Dados em JavaScript
  • 📌 Operadores Aritméticos em JavaScript
  • 📌 O que é o DOM em JavaScript
  • 📌 Condicionais em JavaScript — if, else e switch

🤔 O que são Laços de Repetição?

Imagine que você precisa exibir os números de 1 até 100 no console.

Você poderia escrever assim:

javascript
console.log(1);
console.log(2);
console.log(3);
// ... até o 100
console.log(100);

Isso seria 100 linhas de código para uma tarefa simples. Agora imagine fazer isso com 1.000 itens, ou 10.000.

Com laços de repetição, você resolve isso em 3 linhas:

javascript
for (let i = 1; i <= 100; i++) {
  console.log(i);
}

💬 Laço de repetição = uma instrução que o código executa várias vezes até que uma condição seja atendida.

Laços são usados em praticamente todo programa real — percorrer listas de produtos, exibir posts de um blog, calcular totais, processar dados. Dominar isso é essencial para qualquer desenvolvedor.

⚙️ Conceito Fundamental — Sem isso você não avança

Antes de ver os laços, entenda estas três partes que todo laço tem:

basic
1. INICIALIZAÇÃO   → onde começa
2. CONDIÇÃO        → até quando repete
3. INCREMENTO      → como avança a cada volta

🧠 Se a condição nunca se tornar falsa, o laço roda para sempre — isso se chama loop infinito e trava o programa. Sempre garanta que o laço vai parar!

📌 1. O for — O Mais Usado e Versátil

O for é o laço mais comum em JavaScript. Use quando você sabe quantas vezes quer repetir.

📜 Estrutura básica:

javascript
for (inicialização; condição; incremento) {
  // código que será repetido
}

💡 Exemplo básico — Contando de 1 a 5:

javascript
for (let i = 1; i <= 5; i++) {
  console.log("Número: " + i);
}

🔎 Resultado:

Número: 1
Número: 2
Número: 3
Número: 4
Número: 5

🧠 Entendendo passo a passo:

apache
1ª volta → i = 11 <= 5 ✅ → executa → i++ → i = 2
2ª volta → i = 22 <= 5 ✅ → executa → i++ → i = 3
3ª volta → i = 33 <= 5 ✅ → executa → i++ → i = 4
4ª volta → i = 44 <= 5 ✅ → executa → i++ → i = 5
5ª volta → i = 55 <= 5 ✅ → executa → i++ → i = 6
6ª volta → i = 66 <= 5 ❌ → PARA

💡 Contando de forma decrescente:

javascript
for (let i = 10; i >= 1; i--) {
  console.log("Contagem regressiva: " + i);
}

console.log("🚀 Lançamento!");

🔎 Resultado: Conta de 10 até 1 e exibe "🚀 Lançamento!"

💡 Pulando de 2 em 2 — números pares:

javascript
for (let i = 0; i <= 20; i += 2) {
  console.log(i); // 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
}

💡 Exemplo real — Tabuada:

javascript
let numero = 7;

for (let i = 1; i <= 10; i++) {
  console.log(numero + " x " + i + " = " + (numero * i));
}

🔎 Resultado:

basic
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 10 = 70

📌 2. Percorrendo Arrays com for

Um dos usos mais importantes do for é percorrer arrays — listas de itens.

💡 Exemplo — Lista de alunos:

javascript
let alunos = ["Ana", "Bruno", "Carlos", "Daniela", "Eduardo"];

for (let i = 0; i < alunos.length; i++) {
  console.log("Aluno " + (i + 1) + ": " + alunos[i]);
}

🔎 Resultado:

Aluno 1: Ana
Aluno 2: Bruno
Aluno 3: Carlos
Aluno 4: Daniela
Aluno 5: Eduardo

💡 Dica: alunos.length retorna o tamanho do array (5 neste caso). Usar i < alunos.length garante que o laço percorre todos os itens sem estourar o índice.

💡 Somando todos os valores de um array:

javascript
let notas = [8.5, 7.0, 9.5, 6.0, 8.0];
let soma = 0;

for (let i = 0; i < notas.length; i++) {
  soma += notas[i];
}

let media = soma / notas.length;

console.log("Soma das notas: " + soma);
console.log("Média: " + media.toFixed(2));

🔎 Resultado:

Soma das notas: 39
Média: 7.80

📌 3. O for...of — A Forma Moderna de Percorrer Arrays

O for...of foi introduzido no ES6 e é uma forma mais limpa e legível de percorrer arrays e outros iteráveis.

📜 Estrutura básica:

javascript
for (let item of array) {
  // código com cada item
}

💡 Comparação:

javascript
let frutas = ["🍎 Maçã", "🍌 Banana", "🍇 Uva", "🍊 Laranja"];

// Forma tradicional
for (let i = 0; i < frutas.length; i++) {
  console.log(frutas[i]);
}

// Forma moderna com for...of ✅
for (let fruta of frutas) {
  console.log(fruta);
}

💡 Use for...of quando só precisar dos valores e não do índice.
Use for tradicional quando precisar do índice (posição) de cada item.

💡 Exemplo real — Exibindo produtos:

javascript
let produtos = ["Notebook", "Mouse", "Teclado", "Monitor", "Headset"];

for (let produto of produtos) {
  console.log("🛒 Produto disponível: " + produto);
}

📌 4. O while — Quando Você Não Sabe Quantas Vezes Vai Repetir

O while executa um bloco de código enquanto a condição for verdadeira. Use quando o número de repetições não é conhecido antecipadamente.

📜 Estrutura básica:

javascript
while (condição) {
  // código que será repetido
  // ⚠️ lembre de atualizar a variável para evitar loop infinito!
}

💡 Exemplo básico:

javascript
let contador = 1;

while (contador <= 5) {
  console.log("Contagem: " + contador);
  contador++; // ⚠️ essencial — sem isso, loop infinito!
}

🔎 Resultado:

Contagem: 1
Contagem: 2
Contagem: 3
Contagem: 4
Contagem: 5

🧠 Diferença entre for e while:

foruse quando SABE o número de repetições
whileuse quando NÃO SABE o número de repetições
          e depende de uma condição externa

💡 Exemplo real — Simulando saque bancário:

javascript
let saldo = 1000;
let valorSaque = 150;
let saques = 0;

while (saldo >= valorSaque) {
  saldo -= valorSaque;
  saques++;
  console.log("Saque #" + saques + " realizado. Saldo restante: R$" + saldo);
}

console.log("Saldo insuficiente para novos saques.");
console.log("Total de saques realizados: " + saques);

🔎 Resultado:

apache
Saque #1 realizado. Saldo restante: R$850
Saque #2 realizado. Saldo restante: R$700
Saque #3 realizado. Saldo restante: R$550
Saque #4 realizado. Saldo restante: R$400
Saque #5 realizado. Saldo restante: R$250
Saque #6 realizado. Saldo restante: R$100
Saldo insuficiente para novos saques.
Total de saques realizados: 6

💡 Veja que não sabíamos de antemão quantos saques seriam possíveis — o while foi perfeito para isso!

📌 5. O do...while — Execute Pelo Menos Uma Vez

O do...while é parecido com o while, mas com uma diferença crucial:

🧠 O bloco é executado PRIMEIRO e a condição é verificada DEPOIS.
Isso garante que o código rode pelo menos uma vez, mesmo que a condição já seja falsa.

📜 Estrutura básica:

javascript
do {
  // código executado pelo menos uma vez
} while (condição);

💡 Comparação — while vs do...while:

javascript
// while — não executa se a condição for false desde o início
let x = 10;

while (x < 5) {
  console.log("while: " + x); // ❌ Não executa nenhuma vez
  x++;
}

// do...while — executa UMA VEZ mesmo com condição false
let y = 10;

do {
  console.log("do...while: " + y); // ✅ Executa uma vez: "do...while: 10"
  y++;
} while (y < 5);

💡 Exemplo real — Menu de opções:

javascript
let opcao;

do {
  opcao = prompt(
    "📋 MENU\n" +
    "1 - Ver saldo\n" +
    "2 - Fazer depósito\n" +
    "3 - Fazer saque\n" +
    "0 - Sair\n\n" +
    "Digite sua opção:"
  );

  switch (opcao) {
    case "1":
      alert("💰 Seu saldo é R$1.250,00");
      break;
    case "2":
      alert("✅ Depósito realizado com sucesso!");
      break;
    case "3":
      alert("✅ Saque realizado com sucesso!");
      break;
    case "0":
      alert("👋 Até logo!");
      break;
    default:
      alert("⚠️ Opção inválida. Tente novamente.");
  }

} while (opcao !== "0");

💡 O do...while foi perfeito aqui porque o menu precisa aparecer pelo menos uma vez antes de verificar se o usuário quer sair.

📌 6. O for...in — Percorrendo Objetos

O for...in é usado para percorrer as propriedades de um objeto.

📜 Estrutura básica:

javascript
for (let chave in objeto) {
  // acessa cada propriedade do objeto
}

💡 Exemplo:

javascript
let aluno = {
  nome: "Carlos",
  idade: 22,
  curso: "Desenvolvimento Web",
  nota: 9.5
};

for (let propriedade in aluno) {
  console.log(propriedade + ": " + aluno[propriedade]);
}

🔎 Resultado:

nome: Carlos
idade: 22
curso: Desenvolvimento Web
nota: 9.5

🛑 break e continue — Controlando o Fluxo do Laço

🔴 break — Interrompe o laço imediatamente

javascript
for (let i = 1; i <= 10; i++) {
  if (i === 6) {
    console.log("Parando no " + i);
    break; // sai do laço quando i === 6
  }
  console.log(i);
}

🔎 Resultado: Exibe 1, 2, 3, 4, 5 e para.

🟡 continue — Pula a iteração atual e vai para a próxima

javascript
for (let i = 1; i <= 10; i++) {
  if (i % 2 === 0) {
    continue; // pula os números pares
  }
  console.log(i); // exibe só os ímpares
}

🔎 Resultado: 1, 3, 5, 7, 9

💡 Exemplo prático — Encontrando um produto em estoque:

javascript
let produtos = [
  { nome: "Notebook", estoque: 5 },
  { nome: "Mouse", estoque: 0 },
  { nome: "Teclado", estoque: 0 },
  { nome: "Monitor", estoque: 3 },
  { nome: "Headset", estoque: 0 }
];

console.log("🛒 Produtos com estoque disponível:");

for (let produto of produtos) {
  if (produto.estoque === 0) {
    continue; // pula produtos sem estoque
  }
  console.log("✅ " + produto.nome + " — " + produto.estoque + " unidades");
}

🔎 Resultado:

🛒 Produtos com estoque disponível:
✅ Notebook — 5 unidades
✅ Monitor — 3 unidades

🔄 Laços Aninhados — Loop dentro de Loop

Você pode colocar um laço dentro de outro. Isso é muito usado para trabalhar com tabelas, matrizes e combinações.

💡 Exemplo — Tabuada completa:

javascript
for (let i = 1; i <= 5; i++) {
  console.log("--- Tabuada do " + i + " ---");
  for (let j = 1; j <= 10; j++) {
    console.log(i + " x " + j + " = " + (i * j));
  }
}

⚠️ Atenção: O laço externo roda 5 vezes e, para cada volta, o laço interno roda 10 vezes. Total: 50 execuções.

💎 Projeto Completo — Lista de Tarefas com Loops

html

          <div>
            <button class="btn-concluir" onclick="concluirTarefa(${i})">
              ${tarefa.concluida ? "↩️ Desfazer" : "✅ Concluir"}
            </button>
            <button class="btn-remover" onclick="removerTarefa(${i})">🗑️ Remover</button>
          </div>
        `;
        lista.appendChild(li);
      }

      contador.textContent =
        "📋 " + tarefas.length + " tarefa(s) — " + totalConcluidas + " concluída(s)";
    }

    // Tecla Enter para adicionar tarefa
    document.getElementById("inputTarefa").addEventListener("keypress", function(e) {
      if (e.key === "Enter") {
        adicionarTarefa();
      }
    });
  </script>

</body>
</html>

html 5

🔎 Funcionalidades:
  • ✅ Adicionar tarefas com clique ou Enter
  • ✅ Marcar como concluída / desfazer
  • ✅ Remover tarefas
  • ✅ Contador atualizado em tempo real
  • ✅ Laço for percorrendo e renderizando o array

 🆚 Comparativo Final — Qual laço usar?

┌─────────────┬─────────────────────────────────────────────┐
LAÇO      │ QUANDO USAR                                 │
├─────────────┼─────────────────────────────────────────────┤
for         │ Sei exatamente quantas vezes repetir        │
for...of    │ Quero percorrer arrays de forma limpa       │
for...in    │ Quero percorrer propriedades de objetos     │
whileNão sei quantas vezes, depende de condição  │
do...while  │ Preciso executar pelo menos uma vez         │
└─────────────┴─────────────────────────────────────────────┘

🚨 Boas Práticas com Laços

stata
1. ✅ Sempre garanta que o laço vai parar (evite loop infinito)
2. ✅ Prefira for...of para arrays quando não precisar do índice
3. ✅ Use nomes de variáveis descritivos (produto, aluno) em vez de"i"
4. ✅ Evite laços aninhados profundos — ficam difíceis de ler
5. ✅ Use break para sair cedo quando encontrar o que procura
6. ✅ Use continue para pular itens indesejados sem sair do laço

🔑 Pontos-Chave do Post

💡 Laços são fundamentais — todo sistema real usa repetição para processar listas, dados e eventos

💡 O for é o mais versátil, o for...of é o mais legível para arrays modernos

💡 Loop infinito é o erro mais comum — sempre verifique se sua condição vai se tornar falsa

✍️ Exercício Prático

Crie um arquivo loops.html com os seguintes desafios:

smali
1. Use for para exibir todos os números ímpares de 1 a 50

2. Use while para simular um contador regressivo de foguete:
   → Conta de 10 até 0
   → Ao chegar em 0: "🚀 Lançamento!"

3. Use for...of para percorrer um array de 5 nomes
   → Exiba "Olá, [nome]! Bem-vindo(a)." para cada um

4. Use break para encontrar o primeiro número divisível
   por 7 no intervalo de 1 a 100

5. (Desafio extra)
   → Crie um array com 8 produtos e seus preços
   → Use for para:
     - Somar o total
     - Encontrar o mais caro
     - Encontrar o mais barato
     - Calcular a média de preços
   → Exiba tudo no console

📚 Continue aprendendo JavaScript:

  • 📌 Funções em JavaScript — Guia Completo para Iniciantes
  • 📌 Arrays em JavaScript — Como criar e manipular listas
  • 📌 Objetos em JavaScript — Guia Completo
Esse conteúdo faz parte do projeto Academy Code Christ, criado para ajudar iniciantes a aprender programação de forma gratuita e direta.

Se esse conteúdo te ajudou, você pode me pagar um café ☕


Comentários

Postagens mais visitadas