Na minha opinião, um loop for é usado para iterar em um intervalo conhecido ou determinável.
String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }
que é equivalente (escopo de i de lado) a:
String[] names = //something;
int i = 0;
while (i < names.length )
{
// do stuff
i++;
}
Em outras palavras, o for
loop é simplesmente um açúcar sintático (altamente útil) para uma while
construção comumente usada .
No entanto, estou vendo muitas for(;;)
construções na Web que são funcionalmente equivalentes awhile(true)
Qual o motivo disso? Por que o loop for infinito seria preferido sobre o loop while infinito?
// Eu até vi um livro sobre Java que não usava loops! Levando a construções monstruosas como:
String input = getInput();
for( ; !inputIsValid(input) ; )
{
//redo;
}
language-agnostic
coding-style
Chris Cudmore
fonte
fonte
while
efor
aqui e a pergunta não mudaria.while(true)
efor(;;)
significa a mesma coisa. Você obviamente tem uma forte preferência porwhile
, outros podem ter uma preferência igualmente forte porfor
. É impossível dizer que um é mais correto que o outro.for(;;)
confuso. É um idioma C padrão, que você documentará na seção 3.5 de K&R (2e). Eu entendo que você não gosta; você deve entender que outras pessoas obviamente preferem (senão você nunca a veria). Pode ser mais ou menos aceitável em idiomas diferentes de C; você marcou esse idioma como agnóstico, o que diminui apenas a possibilidade de uma resposta definitiva. Novamente, votei para fechar porque o Q não é construtivo; se eu estivesse ofendido, eu teria sinalizado como ofensivo em vez de ou além do fechamento. Isso é tudo.wheeeeeeee { ... }
Respostas:
É um impedimento de práticas de programação antigas no PDP-11 (sim, eu disse anteriormente ). Ele costumava salvar uma única instrução, que era útil para tornar os loops mais rápidos.
Consulte o seguinte para obter informações adicionais: http://www.flounder.com/exceptions.htm
fonte
for(;;)
sintaxe como (na opinião deles) uma declaração mais direta de intenção de que não havia nenhum critério sendo declarado para sair do loop.while(1) { }
.alguns compiladores emitem um aviso (algo como expressão condicional é constante ) ao usar,
while( 1 )
mas comfor( ; ; )
nada para avisar. Os programadores desejam código sem avisos e, portanto, usam a variante for.fonte
É um hábito adquirido na programação C, onde não há um tipo booleano. Enquanto (1) seria o equivalente potencialmente, mas For (;;) é frequentemente usado como aparece em K&R, se bem me lembro. Eu suspeito que havia uma razão de hardware lá em algum lugar também.
fonte
pois (;;) pode ser lido como "para sempre", que alguns acham mais natural do que "enquanto verdadeiro".
fonte
Todos os programadores experientes que pedi podem reconhecer
for(;;)
mais rapidamente do quewhile(true)
ouwhile(1)
.fonte
for(;;)
14ms mais rápido do quewhile(1)
:-)