programandoai

O loop while

Quando você não sabe de antemão quantas voltas vai dar, e só quer repetir enquanto uma condição continuar verdadeira.

Estudar esta lição interativa →

O for é perfeito quando você sabe o número de repetições de antemão. Mas e quando não sabe? Pense em pedir uma senha ao usuário até ele acertar: podem ser uma, três ou quinze tentativas. Ou um jogo que continua até a vida do personagem chegar a zero. Ou embaralhar um dado até sair um 6. Nesses casos, não existe um "cinco vezes" para colocar no contador: o que existe é uma condição que, uma hora, vai mudar. Para isso serve o while (em português, "enquanto").

O while é o loop mais direto que existe: você dá a ele uma condição e um bloco, e ele repete esse bloco enquanto a condição for verdadeira. Antes de cada volta, ele confere a condição; assim que ela vira falsa, o loop para e o programa segue em frente. É exatamente o ciclo que vimos na lição passada, só que aqui você escreve a condição de forma explícita e cuida do passo com as próprias mãos:

// O while repete ENQUANTO a condição for verdadeira.
let energia = 3;

while (energia > 0) {
  console.log("Ainda tenho energia:", energia);
  energia--; // MUITO importante: mudar a condição para não travar!
}

console.log("Cansei");

Pense na diferença assim: o for é como dar dez voltas na pista (você sabe o número e conta). O while é como correr até cansar: não há um número combinado, você repete enquanto a condição "ainda tenho fôlego" for verdadeira, e para no instante em que ela deixar de ser.

Cuidado com o loop infinito

Aqui mora a grande armadilha do while. Se nada dentro do bloco fizer a condição caminhar em direção ao falso, ela nunca muda, e o loop roda para sempre. No exemplo, quem salva é o energia-- (que subtrai 1 a cada volta): sem essa linha, energia ficaria eternamente em 3 e o "enquanto energia maior que zero" nunca terminaria. Numa página de verdade, isso trava o navegador. Aqui no curso pode experimentar sem medo: o editor interrompe o loop depois de 100 mil voltas e te avisa com um erro. Regra de ouro do while: garanta sempre que algo lá dentro aproxima a condição do fim.

Três variações que completam a família dos loops. O do...while inverte a ordem: o bloco roda pelo menos uma vez e só depois a condição é conferida (útil para "peça a senha, e repita se estiver errada"). O break encerra o loop na hora, mesmo com a condição ainda verdadeira. E o continue abandona a volta atual e salta para a próxima. No exemplo, o do...while roda uma vez mesmo com a condição já falsa, e o for usa continue para pular os pares e break para parar depois do 5.

// do...while: o bloco roda PELO MENOS UMA VEZ; a condição só é conferida depois.
let tentativa = 10;
do {
  console.log("tentativa", tentativa);
  tentativa++;
} while (tentativa < 3); // a condição já começa falsa, mas o bloco rodou uma vez

// break sai do loop na hora; continue pula para a próxima volta.
for (let n = 1; n <= 8; n++) {
  if (n % 2 === 0) continue; // pula os pares
  if (n > 5) break;          // para quando passar de 5
  console.log("ímpar:", n);
}

Previsão: tentativa 10 uma vez, depois ímpar 1, 3 e 5.

// Sua vez! Faça a contagem regressiva 5, 4, 3, 2, 1.
let numero = 5;

while (numero > 0) {
  console.log(numero);
  // Falta uma linha aqui: diminua o numero em 1 (senão, loop infinito!)
}

console.log("Decolar!");

Complete a contagem regressiva e clique em Rodar.

← Voltar ao índice do curso