Was ist der richtige Weg, von einem for-Schleife zu einer while-Schleife zu konvertieren?

stimmen
1

Ich habe eine for-Schleife der Form:

for (int i = from; i < to; i++) {
  // do some code (I don't know exactly what, it is subject to change)
}

Und ich will es zu einer while - Schleife konvertieren (vor allem , weil ich mit dem Wert spielen will iinnerhalb der Schleife rückwärts zu gehen und nach vorne und meinen Mitarbeiter denken , dass dies für Schleife in einem tun , um Probleme anfällig ist. Ich neige dazu, stimmt mit ihm überein). Also schrieb ich etwas wie folgt aus :

int i = from;
while (i < to) {
  try {
    // do some code (I don't know exactly what, it is subject to change)
  } finally {
    i++;
  }
}

Welche Aufforderung einige einige laute Kommentare. Meine Argumentation ist , dass Sie nicht wissen , was der Code innerhalb der Schleife tut - es kann (und tut) haben mehrere continueBefehle.

Als Antwort schrieb er folgendes:

int i = from - 1;
while (++i < to) {
  // do some code (I don't know exactly what, it is subject to change)
}

Zugegeben seine weniger Linien, aber ich denke immer noch, mein Code ist eleganter - was denken Sie?

Veröffentlicht am 03/11/2009 um 18:26
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
3

Und ich will es zu einer while-Schleife konvertieren (vor allem, weil ich mit dem Wert von i in der Schleife spielen will, rückwärts zu gehen und nach vorne und meinen Mitarbeiter denken, dass dies für Schleife in einem tun, um Probleme anfällig ist. Ich neige dazu, zu vereinbaren mit ihm).

Dies ist durchaus akzeptabel in den meisten Sprachen. Es gibt keinen Grund für eine Schleife zu vermeiden.

Beantwortet am 03/11/2009 um 18:30
quelle vom benutzer

stimmen
5

Das Spiel mit dem Wert Ihres Index , während in einer Schleifenstruktur ist anfällig für Probleme, egal , was die Schleifenstruktur ist .

Es wird keine Rolle, ob es sich um eine ist für Schleife oder einer while-Schleife, ist der Punkt, wird der Indexer Sie schließlich eine Entscheidung der Schleifen Beendigung zu machen führen?

Wenn Sie sich sicher sind, dass Sie Indexer sind schließlich Ihr Exit-Zustand erreicht werden, verursachen wird, dann ist das alles, was Sie mit betroffen sein sollten, nicht, ob eine zu verwenden, für oder eine Zeit lang.

Beantwortet am 03/11/2009 um 18:31
quelle vom benutzer

stimmen
0

Der einfachste Weg, dies zu tun, wäre nicht in eine while-Schleife zu konvertieren, wie unten.

for (int i = from; i < to; ) {
  // do some code (I don't know exactly what, it is subject to change)
  i += rand()*10;
}
Beantwortet am 03/11/2009 um 18:33
quelle vom benutzer

stimmen
2

Es scheint mir , dass es einfacher und möglicherweise besser lesbar , es zu konvertieren:

while (condition == true) {
   // do stuff
   // set the condition flag appropriately
}

und so trennt die Beendigung der Schleife von der variablen Inkrementierung.

Wenn ich eine Schleife mit einer Limitprüfung (zB sehe i < limit) würde ich davon ausgehen , neigt dazu , dass es eine Variable ist , die in einer (vernünftigerweise) konsistenten Art und Weise geändert wird. Es gibt keinen Grund , warum Sie nicht tun können , was Sie wollen, aber ich würde zuneigen des lesbaren und erwartetes Verhalten.

Beantwortet am 03/11/2009 um 18:34
quelle vom benutzer

stimmen
0

Zur Beantwortung der Frage zu Code, den ich wählen würde; Ich wähle Ihren längeren Code. Es ist viel einfacher, die erste (längere) Schleife zu lesen. Und ja kann ich die zweite lesen, aber auch wenn Sie viel Erfahrung haben, müssen Sie zweimal schauen zu wissen, was das Schleife tut. Außerdem wird der Compiler den Code gut genug optimieren.

Beantwortet am 03/11/2009 um 18:35
quelle vom benutzer

stimmen
1

Warum mit dummen Schleifen Mühe , wenn Sie das gleiche tun können (und noch viel mehr!) Mit der uber-mächtig goto?

i = fro;
my_loop:
//all your stuff here
i++;
if (i < to) goto my_loop;

Wenn Sie einer jener Zartbesaitete Programmierer , die die vermindern goto, dann können Sie mit diesem versuchen:

i = fro;
while(1) {
    //your stuff here
    if (++i < to) break;
}
Beantwortet am 03/11/2009 um 18:38
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more