Como funciona o laço for
Transforme uma repetição com while em for, acompanhe a ordem de execução e construa progressões crescentes e decrescentes sem errar os limites.

Transforme uma repetição conhecida em for
O laço for é adequado quando a repetição possui uma progressão clara: um estado inicial, uma condição de continuidade e uma atualização realizada depois de cada passagem.
Considere um algoritmo que exibe cinco sessões de estudo usando while:
sessao <- 1
ENQUANTO sessao <= 5 FAÇA
EXIBIR "Sessão", sessao
sessao <- sessao + 1
FIM ENQUANTO
No for clássico, os três controles ficam reunidos no cabeçalho:
PARA sessao <- 1; sessao <= 5; sessao <- sessao + 1 FAÇA
EXIBIR "Sessão", sessao
FIM PARA
A forma ficou mais compacta, mas o algoritmo não perdeu etapas. Inicialização, teste, corpo e atualização continuam acontecendo em uma ordem definida.
O cabeçalho reúne três controles diferentes
Use a forma geral:
PARA inicialização; condição; atualização FAÇA
corpo
FIM PARA
Cada parte possui um momento e uma responsabilidade.
Inicialização
sessao <- 1
Executa uma única vez, antes do primeiro teste. Define o primeiro valor candidato da progressão.
Condição
sessao <= 5
É avaliada antes de cada passagem. Se começar falsa, o corpo executa zero vezes. O operador relacional determina quais valores pertencem ao intervalo.
Atualização
sessao <- sessao + 1
Executa depois do corpo e antes do próximo teste. Produz o valor candidato da iteração seguinte.
for concentra os controles da progressão; ele não transforma as três etapas em uma única operação.O corpo deve conter o trabalho de cada passagem. Se a atualização do controle ficar duplicada também dentro do corpo, a progressão pode pular valores.
A ordem real não é simplesmente da esquerda para a direita
Embora o cabeçalho seja escrito como inicialização; condição; atualização, a atualização não acontece imediatamente depois da condição. A execução segue esta ordem:
- realizar a inicialização uma vez;
- testar a condição;
- executar o corpo se a condição for verdadeira;
- realizar a atualização;
- voltar ao teste;
- sair quando a condição for falsa.
Para sessao de 1 a 5, o rastreamento é:
| Teste | Valor de sessao | sessao <= 5 | Corpo | Atualização |
|---|---|---|---|---|
| 1 | 1 | verdadeiro | exibir sessão 1 | sessao = 2 |
| 2 | 2 | verdadeiro | exibir sessão 2 | sessao = 3 |
| 3 | 3 | verdadeiro | exibir sessão 3 | sessao = 4 |
| 4 | 4 | verdadeiro | exibir sessão 4 | sessao = 5 |
| 5 | 5 | verdadeiro | exibir sessão 5 | sessao = 6 |
| 6 | 6 | falso | não executar | não atualizar |
Existem cinco iterações, cinco atualizações e seis testes. O teste adicional reconhece que o primeiro valor fora do intervalo foi alcançado.
Defina o intervalo antes de escolher os símbolos
Uma progressão não é descrita apenas por “começa em 1 e termina em 5”. Registre:
- primeiro valor incluído;
- regra que decide o último valor incluído;
- primeiro valor excluído;
- direção do avanço;
- tamanho do passo.
Para contar sessões de 1 a 5:
inicio = 1
condicao = sessao <= 5
passo = +1
valores = 1, 2, 3, 4, 5
primeiro excluido = 6
Para percorrer cinco posições indexadas a partir de zero:
inicio = 0
condicao = posicao < 5
passo = +1
valores = 0, 1, 2, 3, 4
primeiro excluido = 5
Trocar < por <= sem ajustar o significado pode criar um erro de uma posição. Não existe um operador universalmente correto: existe o operador coerente com o intervalo modelado.
Escreva o for clássico em JavaScript e C#
JavaScript e C# usam uma forma de cabeçalho semelhante.
JavaScript
for (let sessao = 1; sessao <= 5; sessao += 1) {
console.log(`Sessão ${sessao}`);
}
let sessao = 1 executa uma vez. sessao <= 5 vem antes de cada corpo. sessao += 1 acontece após cada passagem.
C#
for (int sessao = 1; sessao <= 5; sessao += 1)
{
Console.WriteLine($"Sessão {sessao}");
}
Em ambos os exemplos, a variável declarada no inicializador fica limitada ao escopo definido pela construção da linguagem. Se o valor final precisar ser usado depois, avalie se ele representa um resultado real ou apenas um mecanismo interno de controle.
A sintaxe permite variações mais complexas, inclusive partes omitidas em algumas linguagens. Para aprender e manter o código claro, comece com uma variável de controle, uma condição direta e uma atualização previsível.
Em Python, for percorre um iterável
O for de Python não expõe inicialização, condição e atualização no cabeçalho como JavaScript e C#. Ele atribui, a cada passagem, o próximo item de uma sequência ou de outro objeto iterável.
Para produzir as sessões de 1 a 5, use range:
for sessao in range(1, 6):
print(f"Sessão {sessao}")
range(1, 6) começa em 1 e para antes de 6, produzindo 1, 2, 3, 4, 5. O limite final é exclusivo.
Para percorrer itens diretamente:
temas = ["Lógica", "Dados", "Testes"]
for tema in temas:
print(tema)
Aqui, a intenção não é administrar uma posição numérica, mas visitar cada tema. JavaScript e C# também oferecem construções próprias para percorrer coleções. A palavra for aparece em todas essas formas, porém o contrato do cabeçalho não é idêntico.
Evite explicar range como se ele “fosse” a condição de um for clássico. Ele fornece uma progressão iterável; o mecanismo do Python obtém seus valores um a um.
Mude direção e passo de maneira coerente
Uma contagem regressiva precisa combinar estado inicial, condição e atualização:
for (let valor = 10; valor >= 2; valor -= 2) {
console.log(valor);
}
Resultado:
10
8
6
4
2
O controle começa em 10, continua enquanto for maior ou igual a 2 e diminui de dois em dois. O próximo valor, 0, torna a condição falsa.
Em Python, a progressão equivalente é:
for valor in range(10, 1, -2):
print(valor)
O limite 1 não entra; o passo -2 produz 10, 8, 6, 4, 2.
Se o controle começa em 10, a condição exige valor >= 2 e a atualização soma 2, ele se afasta do limite. Em um domínio numérico sem estouro, o laço não alcançaria a saída. Direção da condição e sinal do passo precisam concordar.
Escolha for quando a progressão é parte da intenção
O for clássico costuma comunicar bem:
- repetir uma quantidade conhecida de vezes;
- percorrer uma faixa de posições;
- avançar ou recuar com passo regular;
- manter os controles da progressão próximos;
- deixar a variável de controle restrita ao laço.
Prefira outra forma quando:
- a duração depende de uma condição sem progressão previsível;
- a primeira passagem precisa ocorrer antes do teste;
- a intenção é visitar itens sem usar suas posições;
- a atualização depende de muitas ramificações dentro do corpo.
Um while pode reproduzir qualquer progressão simples do exemplo, mas exige manter inicialização e atualização em locais separados. A escolha é de comunicação e manutenção, não de capacidade absoluta.
Entenda o efeito de continue
No for clássico, um continue encerra a passagem atual, executa a parte de atualização e volta à condição. Isso é diferente de um while cuja atualização manual esteja abaixo do ponto desviado.
for (let valor = 1; valor <= 5; valor += 1) {
if (valor === 3) {
continue;
}
console.log(valor);
}
O resultado é 1, 2, 4, 5. Mesmo quando valor vale 3, a atualização ainda o leva a 4. A progressão não fica presa.
Isso não torna todo uso de continue simples. Se o corpo mantém outros estados além da variável do cabeçalho, confirme que o desvio não pula uma atualização necessária.
Teste a progressão por propriedades
Não valide somente a lista feliz. Verifique:
| Caso | Exemplo | Resultado esperado |
|---|---|---|
| condição inicialmente falsa | inicio = 6, condicao <= 5 | zero iterações |
| uma passagem | inicio = 5, condicao <= 5, passo +1 | somente 5 |
| várias passagens | inicio = 1, condicao <= 5, passo +1 | 1 a 5 |
| passo maior | inicio = 1, condicao <= 5, passo +2 | 1, 3, 5 |
| direção incompatível | inicio = 1, condicao <= 5, passo -1 | não termina corretamente |
Além das saídas concretas, confira estas propriedades:
- todo valor exibido satisfaz a condição;
- o primeiro valor é o inicializado;
- dois valores consecutivos diferem pelo passo;
- a atualização final produz um valor que falha no teste;
- a quantidade de iterações corresponde ao intervalo desejado.
Faça um teste de mesa quando houver dúvida sobre limites. Registre condição, corpo e atualização em colunas separadas.
Pratique com uma agenda de revisões
Crie três progressões:
- dias de revisão de 1 a 7;
- posições de uma semana armazenadas de 0 a 6;
- contagem regressiva de 12 a 0, diminuindo de 3 em 3.
Para cada uma, declare primeiro valor incluído, último incluído, primeiro excluído, direção e passo. Depois escreva em pseudocódigo, JavaScript ou C# e registre o teste final falso.
Reescreva uma delas em Python com range. Explique por que o argumento de parada não aparece na saída.
O que você deve guardar
O for clássico reúne inicialização, condição e atualização, mas executa cada parte em um momento diferente. Ele é especialmente claro quando uma progressão previsível controla a repetição.
Modele o intervalo antes de escolher < ou <=, alinhe direção e passo, registre o teste final falso e reconheça que o for de Python percorre um iterável em vez de expor o mesmo cabeçalho. Agora aprofunde contadores e acumuladores para distinguir os papéis desempenhados pelos valores que mudam durante uma repetição.
Referências
- MDN Web Docs —
forem JavaScript. Acesso em 11 set. 2026. - Microsoft Learn — C# Language Specification: the
forstatement. Acesso em 11 set. 2026. - Microsoft Learn — Iteration statements:
for,foreach,doewhile. Acesso em 11 set. 2026. - Python Documentation —
forstatements. Acesso em 11 set. 2026.