1. Comparando loops: for
vswhile
Um while
loop pode ser usado em qualquer lugar em que uma instrução ou grupo de instruções precise ser executada várias vezes. Mas entre todos os cenários possíveis, um merece destaque.
Estamos falando da situação em que o programador (o criador do programa) sabe antecipadamente quantas vezes o loop deve ser executado. Isso geralmente é tratado declarando uma variável de contador especial e, em seguida, aumentando (ou diminuindo) a variável a 1
cada iteração do loop.
Tudo parece funcionar como deveria, mas não é muito conveniente. Antes do loop, definimos o valor inicial da variável contadora. Então na condição verificamos se já atingiu o valor final. Mas geralmente alteramos o valor no final do corpo do loop.
E se o corpo do loop for grande? Ou se tivermos vários loops aninhados? Em geral, nesses casos, é desejável coletar todas essas informações sobre as variáveis do contador em um só lugar. E é por isso que temos o for
loop em Java. Também não parece muito complicado:
for (statement 1; condition; statement 2)
{
block of statements
}
Um while
loop tem apenas uma condição entre parênteses, mas um for
loop adiciona duas instruções, separadas por ponto e vírgula.
A realidade é mais simples do que parece: o compilador converte um for
loop em um loop comum while
como este:
statement 1;
while (condition)
{
block of statements
statement 2;
}
Ou melhor ainda, vamos demonstrar isso com um exemplo. Os dois trechos de código abaixo são idênticos.
Opção 1 | opção 2 |
---|---|
|
|
Acabamos de reunir em um só lugar todo o código que pertence à i
variável do contador.
Em um for
loop, a instrução 1 é executada apenas uma vez, antes do próprio loop começar. Isso pode ser visto claramente no segundo trecho de código
a instrução 2 é executada o mesmo número de vezes que o corpo do loop e, a cada vez, é executada após todo o corpo do loop ter sido executado
2. Onde o for
loop é usado
O for
loop é provavelmente o tipo de loop mais usado em Java. É usado em todos os lugares, para programadores é apenas mais claro e conveniente do que um while
loop. Praticamente qualquer while
loop pode ser convertido em um for
loop.
Exemplos:
loop while | para loop |
---|---|
|
|
|
|
|
|
|
|
|
|
Preste atenção ao último exemplo. As instruções para trabalhar com o contador de loop estão ausentes. Não há contador nem declaração.
Em um for
loop, o Java permite omitir a "instrução para inicializar o contador" e a "instrução para atualizar o contador". Mesmo a expressão que define a condição do loop pode ser omitida.
3. Nuances do uso do for
loop
Um ponto importante sobre o uso for
de loops break
e continue
instruções.
Uma break
instrução em um for
loop funciona da mesma forma que em um while
loop — ela termina o loop imediatamente. Uma continue
instrução pula o corpo do loop, mas não statement 2
(o que altera o contador do loop).
Vamos dar outra olhada em como os loops for
e while
estão relacionados.
for (statement 1; condition; statement 2)
{
block of statements
}
statement 1;
while (condition)
{
block of statements
statement 2;
}
Se uma continue
instrução for executada em um for
loop , o restante do bloco de instruções será ignorado, mas a instrução 2 (aquela que funciona com a for
variável contadora do loop) ainda será executada.
Vamos voltar ao nosso exemplo pulando números que são divisíveis por 7.
Este código ficará em loop para sempre | Este código funcionará bem |
---|---|
|
|
O código que usa o while
loop não funcionará — i nunca será maior que 7. Mas o código com o for
loop funcionará bem.
4. Comparando loops for: Java vs Pascal
A propósito, Pascal também tem um For
loop. Em geral, praticamente toda linguagem de programação possui uma. Mas em Pascal é super claro. Exemplos:
Pascal | Java |
---|---|
|
|
|
|
|
|