À ma façon de penser, une boucle for est utilisée pour itérer sur une plage connue ou déterminable.
String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }
ce qui équivaut (portée de i de côté) à:
String[] names = //something;
int i = 0;
while (i < names.length )
{
// do stuff
i++;
}
En d'autres termes, la for
boucle est simplement un sucre syntaxique (très utile) pour une while
construction couramment utilisée .
Cependant, je vois beaucoup de for(;;)
constructions sur le Web qui sont fonctionnellement équivalentes àwhile(true)
Quel en est le raisonnement? Pourquoi la boucle for infinie serait-elle préférée à la boucle while infinie?
// J'ai même vu un manuel java qui n'utilisait pas du tout de boucles while! Menant à des constructions monstrueuses telles que:
String input = getInput();
for( ; !inputIsValid(input) ; )
{
//redo;
}
language-agnostic
coding-style
Chris Cudmore
la source
la source
while
etfor
ici et la question ne changera pas.while(true)
etfor(;;)
signifient la même chose. Vous avez évidemment une forte préférence pourwhile
, d'autres peuvent avoir une préférence tout aussi forte pourfor
. Il est impossible de dire que l'un est plus correct que l'autre.for(;;)
déroutant. C'est un idiome C standard, que vous allez documenter dans la section 3.5 de K&R (2e). Je comprends que vous ne l'aimez pas; vous devez comprendre que les autres le préfèrent évidemment (sinon vous ne le verriez jamais). Il peut être plus ou moins acceptable dans des langues autres que C; vous avez étiqueté cette langue-agnostique qui ne fait que diminuer la possibilité d'une réponse définitive. Encore une fois, j'ai voté pour fermer parce que le Q n'est pas constructif; si j'avais été offensé, j'aurais signalé l'offensive au lieu ou en plus de la fermeture. C'est tout.wheeeeeeee { ... }
Réponses:
C'est un maintien des anciennes pratiques de programmation sur le PDP-11 (oui, j'ai dit vieux ). Il permet de sauvegarder une seule instruction, ce qui est utile pour accélérer l'exécution des boucles.
Voir les informations suivantes pour plus d'informations: http://www.flounder.com/exceptions.htm
la source
for(;;)
syntaxe comme (à leur avis) une déclaration plus directe de intention qu'aucun critère ne soit énoncé pour sortir de la boucle.while(1) { }
.certains compilateurs donneront un avertissement (quelque chose comme l' expression conditionnelle est constante ) lors de l'utilisation,
while( 1 )
mais avecfor( ; ; )
rien à avertir. Les programmeurs veulent du code sans avertissements, ils utilisent donc la variante for.la source
C'est une habitude acquise de la programmation C où il n'y a pas de type booléen. Bien que (1) soit potentiellement l'équivalent, For (;;) est souvent utilisé car il apparaît dans K&R si je me souviens bien. Je soupçonne qu'il y avait aussi une raison matérielle quelque part.
la source
car (;;) peut être lu comme "pour toujours" que certains trouvent plus naturel que "tout en étant vrai".
la source
Tous les programmeurs expérimentés à qui j'ai demandé peuvent reconnaître
for(;;)
plus rapidement quewhile(true)
ouwhile(1)
.la source
for(;;)
14 ms plus rapidement quewhile(1)
:-)