Repetir tarefas é uma das coisas que os computadores fazem melhor. Imprimir uma lista com mil nomes, somar todos os itens de um carrinho de compras ou verificar cada linha de um arquivo são tarefas que ninguém escreveria manualmente, linha por linha. É aí que entram as estruturas de repetição, também chamadas de laços ou loops. Neste artigo, você vai entender como funcionam o for, o while e o do-while, quando usar cada um e quais erros evitar.
O que é uma estrutura de repetição
Uma estrutura de repetição é um bloco de código que executa as mesmas instruções várias vezes, enquanto uma condição for verdadeira. Em vez de escrever a mesma linha dez vezes, você escreve uma vez e informa ao programa quantas vezes (ou até quando) ela deve se repetir.
Todo laço, independentemente da linguagem, é formado por três ideias básicas:
- Inicialização: o ponto de partida, geralmente uma variável de controle (um contador).
- Condição: o teste que decide se o laço continua ou para.
- Atualização: a mudança que aproxima o laço do fim, como somar 1 ao contador.
Se qualquer uma dessas três partes estiver errada, o laço pode repetir menos vezes do que deveria — ou nunca parar.
O laço for: quando você sabe quantas repetições quer
O for é a escolha natural quando o número de repetições é conhecido antes de o laço começar. Ele reúne inicialização, condição e atualização em uma única linha, o que deixa o código compacto e fácil de ler.
// Exibe os números de 1 a 5
for (int i = 1; i <= 5; i++) {
imprimir(i);
}
Lendo em voz alta: comece com i valendo 1; enquanto i for menor ou igual a 5, execute o bloco; ao fim de cada volta, some 1 em i. O laço roda exatamente cinco vezes.
Use o for quando a resposta para “quantas vezes isso vai repetir?” já existe antes da primeira volta: percorrer os 12 meses do ano, os 50 itens de uma lista ou as 3 tentativas de senha permitidas.
O laço while: quando você não sabe quantas repetições serão necessárias
O while repete enquanto uma condição continuar verdadeira, sem se importar com contagem. Ele testa a condição antes de executar o bloco. Se a condição já começar falsa, o bloco nunca roda.
// Continua pedindo até o usuário digitar um número válido
enquanto (numero <= 0) {
imprimir("Digite um número positivo:");
numero = lerEntrada();
}
Aqui não há como saber de antemão quantas tentativas o usuário fará. Pode acertar de primeira ou errar oito vezes. O while é ideal para situações que dependem de algo externo: entrada do usuário, leitura de um arquivo até o fim ou espera por uma resposta.
O laço do-while: quando o bloco precisa rodar pelo menos uma vez
O do-while é irmão do while, com uma diferença importante: ele testa a condição depois de executar o bloco. Isso garante no mínimo uma execução, mesmo que a condição seja falsa desde o início.
// Exibe o menu ao menos uma vez e repete até o usuário escolher sair
faca {
exibirMenu();
opcao = lerEntrada();
} enquanto (opcao != "sair");
Menus interativos são o exemplo clássico: o menu precisa aparecer ao menos uma vez para que o usuário possa escolher alguma coisa — inclusive escolher sair. Vale saber que nem toda linguagem oferece o do-while; em Python, por exemplo, ele é simulado com um while e uma condição de saída interna.
Comparando os três laços
| Característica | for | while | do-while |
|---|---|---|---|
| Quando o teste acontece | Antes de cada volta | Antes de cada volta | Depois de cada volta |
| Execuções mínimas | Zero | Zero | Uma |
| Número de repetições | Geralmente conhecido | Geralmente desconhecido | Geralmente desconhecido |
| Uso típico | Percorrer listas e contagens | Aguardar uma condição mudar | Menus e validações iniciais |
Vale reforçar: os três são intercambiáveis. Qualquer for pode ser reescrito como while e vice-versa. A escolha é sobre clareza, não sobre capacidade. Escolha o laço que deixa a intenção do código mais evidente para quem for lê-lo depois — inclusive você.
Erros comuns em estruturas de repetição
Alguns tropeços aparecem com frequência para quem está começando:
- Laço infinito: esquecer de atualizar a variável de controle. Se o contador nunca muda, a condição nunca fica falsa e o programa trava.
- Erro de um a mais ou um a menos: confundir < com <= e acabar processando um item a mais ou deixando o último de fora.
- Modificar a coleção durante o laço: remover itens de uma lista enquanto a percorre costuma gerar resultados imprevisíveis.
- Trabalho desnecessário dentro do laço: repetir um cálculo que poderia ser feito uma única vez antes do laço começar.
Uma técnica simples ajuda muito a evitar esses problemas: o teste de mesa. Pegue papel e caneta, escolha valores pequenos e anote o valor de cada variável a cada volta do laço. Em poucos minutos, você enxerga exatamente onde a lógica desvia do esperado — sem depender do computador.
Comandos que alteram o fluxo do laço
Duas instruções aparecem com frequência dentro de laços e valem ser conhecidas desde cedo:
- break: interrompe o laço imediatamente e segue para o código seguinte. Útil quando você encontrou o que procurava e não precisa continuar.
- continue: pula o restante da volta atual e vai direto para a próxima. Útil para ignorar itens que não interessam.
Use os dois com moderação. Em excesso, eles espalham as saídas do laço por vários pontos do código e dificultam o entendimento.
Laços aninhados
Um laço pode conter outro laço dentro dele. É assim que se percorre uma tabela: o laço externo caminha pelas linhas e o interno, pelas colunas. Se o externo roda 10 vezes e o interno roda 10 vezes a cada volta, o bloco mais interno executa 100 vezes. Esse crescimento é rápido, então tenha atenção ao aninhar muitos níveis — o custo se multiplica.
Conclusão
Estruturas de repetição são um dos pilares da lógica de programação. O for brilha quando o número de voltas é conhecido, o while resolve situações que dependem de uma condição externa e o do-while garante ao menos uma execução. Dominar os três é menos sobre decorar sintaxe e mais sobre reconhecer qual deles descreve melhor o problema que você tem em mãos.
A melhor forma de fixar esses conceitos é praticando: escreva pequenos programas que contem, somem, filtrem e percorram listas, e faça o teste de mesa sempre que o resultado surpreender. Se quiser se aprofundar de forma estruturada, vale explorar os cursos gratuitos de lógica de programação e desenvolvimento disponíveis na Cursa, que acompanham você desde os primeiros conceitos até a prática em linguagens como Python, Java e C.



























