2016-06-08 6 views
4

Student, der hier gerne programmiert. Ich habe mit Java seit 4 Jahren programmiert, und ich habe das Gefühl, dass ich ziemlich gut verstehe, wie die Sprache funktioniert. Vor kurzem stolperte ich jedoch über etwas, das mich ziemlich überraschte. Während ich über for-Schleifen nachdachte, dachte ich: "Hey, der Inkrement-Teil einer for-Schleife ist nur eine Operation, kann ich andere Dinge dort hineinlegen?" und schließlich nach einigen Herumspielen entschieden ich mich, dies versuchen:Zusätzlichen Code zum Inkrementschritt einer for-Schleife hinzufügen

for(int i = 0; i < 10; i++, System.out.print("foo"), System.out.print("bar")){} 

Dies ist ein völlig leer for-Schleife, mit dem Druck Anrufen innerhalb der Abstufung der Schleife. Zu meiner Überraschung funktioniert diese Schleife korrekt und druckt jedes Mal, wenn sie eine Schleife ausführt, foo und bar. Soweit ich das beurteilen kann, können Sie so viele Methoden eingeben wie Sie möchten.

Also was ist das? Ich habe danach gesucht und nichts gefunden. Ich habe das nie erfahren. Sollte es vermieden werden? Sollte es benutzt werden? Warum funktioniert es überhaupt? Ich kann keine Ressourcen finden, die Beispiele dafür zeigen. Jeder Input von echten Programmierern wäre großartig zu hören!

+1

Mein Java-Buch beginnt zu brennen. –

Antwort

8

Dies wird durch die Java Language Specification abgedeckt. Auszug:

Wenn der ForUpdate-Teil vorhanden ist, werden die Ausdrücke in der Reihenfolge von links nach rechts ausgewertet; Ihre Werte werden gegebenenfalls verworfen.

Sollte es verwendet werden? Meiner Meinung nach, nein. Es macht den Code schwieriger zu lesen und ist überhaupt nicht idiomatisch.

0

Die Syntax der for-Schleife ist einfach eine verkürzte Möglichkeit, mehrere Codezeilen zu schreiben. Der erste Teil ist die Initialisierung, der zweite ist ein bedingter und der dritte ist was immer du willst! (In den meisten Fällen ein Iterator). Die meisten Leute legen nichts anderes hinein, weil es merkwürdig erscheint, oder sie mögen es einfach, ihren Code auf eine bestimmte Art zu organisieren.

0

Nun können Sie von einem denken for-Schleife als eine while-Schleife, die Sie mit einigen „netten“ Formatierung bietet: So zum Beispiel die Schleife

for(int i = 0; i < 10; i++){ 
    ... 
} 

ist die gleiche wie:

int i = 0; 
while(i < 10){ 
    ... 
    i++; 
} 

Beachten Sie, dass die for-Schleife im Prinzip nur das aufnimmt, was Sie im increment-Teil geschrieben haben, und es am Ende der Schleife platziert, kurz bevor sie zum Anfang springt. Also wird alles, was Sie dort eingeben, im Wesentlichen am Ende des Codes innerhalb der Schleife hinzugefügt. Sie können mit diesem ausprobieren vielleicht eine bessere Vorstellung von dem, was passiert ist:

for(int i = 0; i < 5; System.out.println("i before" + i),i++, System.out.println("i after" + i)){ 
    System.out.println("Inside"); 
} 

Welche ausdruckt:

Inside 
i before0 
i after1 
Inside 
... 

Wie Nebenbei bemerkt: Ich würde es auf jeden Fall nicht so verwenden, da es macht den Code nur schwer verständlich und hat keinen wirklichen Nutzen.

+0

(fast gleich, außer für den Umfang der 'i'-Variable) –