Mobile App Development · Dart/Flutter
A diferença entre while e do-while, e como usar while (true) com break quando o número de repetições só é conhecido durante a execução.
Compreender a diferença entre while e do-while e saber quando usar cada um. Enquanto o for é ideal quando você já sabe quantas vezes vai repetir, o while brilha quando a repetição depende de uma condição que só se resolve durante a execução — como esperar uma entrada válida do usuário ou atingir um valor calculado.
while (condição)
A condição é testada antes de cada iteração — se já começar falsa, o corpo nunca executa.
do { ... } while (condição)
O corpo executa primeiro, e a condição só é testada no final — garante ao menos uma execução.
while (true) { ... break; }
Cria um laço que só para quando um break é executado — útil quando a condição de parada depende de um cálculo feito dentro do próprio laço.
continue
Pula o restante do corpo na iteração atual e volta a testar a condição do while.
contador-- / contador++
Como o while não tem um "passo" embutido como o for, é preciso avançar ou retroceder a variável de controle manualmente dentro do corpo.
Random().nextInt(n)
Gera um número inteiro aleatório de dart:math — usado em laços que repetem até o usuário acertar um valor sorteado.
stdin.readLineSync()
Lê uma linha digitada pelo usuário no terminal, de dart:io — comum em laços que repetem até uma entrada específica ser fornecida.
int.tryParse(texto)
Converte texto em int; retorna null se o texto não for um número válido, em vez de lançar erro.
// Exemplo: comparar 'while' e 'do-while', e usar 'while (true)' com 'break'.
void main() {
// 'while': a condição é testada ANTES de cada iteração — pode não executar nenhuma vez.
var contador = 3;
while (contador > 0) {
print('While: $contador');
contador--;
}
// 'do-while': o corpo executa PRIMEIRO, a condição só é testada no final.
// Garante ao menos uma execução, mesmo que a condição já comece falsa.
var tentativa = 5;
do {
print('Do-while (tentativa $tentativa)');
} while (tentativa < 0);
// 'while (true)' cria um laço que só para com 'break' — útil quando a
// condição de parada depende de um cálculo feito dentro do próprio laço.
var potencia = 1;
var expoente = 0;
while (true) {
if (potencia > 20) {
break;
}
expoente++;
potencia *= 2;
}
print('2^$expoente = $potencia (primeira potencia de 2 maior que 20)');
}
While: 3 While: 2 While: 1 Do-while (tentativa 5) 2^5 = 32 (primeira potencia de 2 maior que 20)
do-while do exemplo para que a condição comece verdadeira e observe quantas vezes ele repete.while (true) + break.continue ao laço da contagem regressiva para pular a exibição do número 1.