Mobile App Development · Dart/Flutter

11 · While

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.

1Objetivo da aula

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.

2O que vamos aprender

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.

3Exemplo comentado

// 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)');
}

4Saída esperada

While: 3
While: 2
While: 1
Do-while (tentativa 5)
2^5 = 32 (primeira potencia de 2 maior que 20)

5Do conteúdo para a prática

6Prática sugerida