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.
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.