Meines Erachtens wird eine for-Schleife verwendet, um einen bekannten oder bestimmbaren Bereich zu durchlaufen.
String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }
Das ist äquivalent (Umfang von i beiseite) zu:
String[] names = //something;
int i = 0;
while (i < names.length )
{
// do stuff
i++;
}
Mit anderen Worten, die for
Schleife ist einfach ein (sehr nützlicher) syntaktischer Zucker für ein häufig verwendetes while
Konstrukt.
Ich sehe jedoch viele for(;;)
Konstrukte im Web, die funktional äquivalent zu sindwhile(true)
Was ist die Begründung dafür? Warum sollte die Endlosschleife der Endlosschleife while vorgezogen werden?
// Ich habe sogar ein Java-Lehrbuch gesehen, das überhaupt keine while-Schleifen verwendet hat! Dies führt zu solchen monströsen Konstrukten wie:
String input = getInput();
for( ; !inputIsValid(input) ; )
{
//redo;
}
language-agnostic
coding-style
Chris Cudmore
quelle
quelle
while
undfor
hier und die Frage würde sich nicht ändern.while(true)
undfor(;;)
meine das Gleiche. Sie haben offensichtlich eine starke Vorliebe fürwhile
, andere mögen eine ebenso starke Vorliebe für habenfor
. Es ist unmöglich zu sagen, dass einer korrekter ist als der andere.for(;;)
verwirrend. Es ist eine Standard-C-Sprache, die Sie in Abschnitt 3.5 von K & R (2e) dokumentiert haben. Ich verstehe, dass es dir nicht gefällt. Sie sollten verstehen, dass andere es offensichtlich bevorzugen (sonst würden Sie es nie sehen). Es kann in anderen Sprachen als C mehr oder weniger akzeptabel sein; Sie haben diesen Sprachunabhängigen markiert, was die Möglichkeit einer endgültigen Antwort nur verringert. Auch hier stimmte ich zu schließen , weil die Q nicht konstruktiv ist; Wenn ich beleidigt gewesen wäre, hätte ich statt oder zusätzlich zum Schließen als beleidigend gekennzeichnet. Das ist alles.wheeeeeeee { ... }
Antworten:
Es ist ein Überbleibsel aus alten Programmierpraktiken auf dem PDP-11 (ja, ich sagte alt ). Es wurde ein einzelner Befehl gespeichert, was nützlich war, um Schleifen schneller laufen zu lassen.
Weitere Informationen finden Sie im Folgenden: http://www.flounder.com/exceptions.htm
quelle
for(;;)
Syntax (seiner Meinung nach) als direktere Aussage von verwendet Absicht, dass keine Kriterien für das Verlassen der Schleife angegeben wurden.while(1) { }
.Einige Compiler geben bei der Verwendung eine Warnung aus (so etwas wie Bedingungsausdruck ist konstant ),
while( 1 )
aberfor( ; ; )
es gibt nichts, vor dem sie warnen müssen. Programmierer wollen Code ohne Warnungen, deshalb verwenden sie die for-Variante.quelle
Es ist eine Gewohnheit, die durch C-Programmierung erworben wurde, bei der es keinen Booleschen Typ gibt. Zwar wäre (1) möglicherweise das Äquivalent, aber For (;;) wird oft verwendet, wie es in K & R angezeigt wird, wenn ich mich richtig erinnere. Ich vermute, dass es irgendwo auch einen Hardware-Grund gab.
quelle
denn (;;) kann als "für immer" gelesen werden, was manche natürlicher finden als "solange es wahr ist".
quelle
Alle erfahrenen Programmierer, die ich gefragt habe, können
for(;;)
schneller alswhile(true)
oder erkennenwhile(1)
.quelle
for(;;)
14 ms schneller verstehen können alswhile(1)
:-)