Frage

Ich habe nie verstanden, warum ein mit zu tun, während Schleifen erforderlich ist. Ich verstehe, was sie tun, die den Code auszuführen ist, dass die while-Schleife enthält, ohne zu überprüfen, ob die Bedingung wahr erste ist.

Aber ist nicht der folgende Code:

do{
    document.write("ok");
}
while(x == "10");

Genau das gleiche wie:

document.write("ok");
while(x == "10"){
    document.write("ok");
}

Vielleicht sehr dumm ich bin zu sein und etwas offensichtlich aus fehle, aber ich sehe nicht den Vorteil der Verwendung von zu tun, während über mein obiges Beispiel.

War es hilfreich?

Lösung

Ihr Beispiel-Code ist falsch:

do{
    document.write("ok");
}while(x == "10"){
    document.write("ok");
}

Dies würde die tatsächliche Form sein:

do {
    document.write("ok");
} while(x == "10");

Sie sind richtig, dass es den inneren Codeblock ausgeführt, bevor die Bedingung überprüft, aber es muss nicht der innere Code sperren, wie Sie es haben duplizieren. Das tun / while-Konstrukt ist (wie Sie bereits erwähnt haben) ein Weg, um sicherzustellen, dass ein Stück Code ausgeführt wird 1 oder mehrmals statt 0 oder mehrmals (abhängig von dem bedingten).

Andere Tipps

  • Wie Sie sehen Sie hatte die gleiche Linie im zweiten Beispiel zu wiederholen. Wenn Sie halten, werden Sie wahrscheinlich diese beiden Zeilen gleich sein wollen, aber Sie haben wiederholt sich .

  • Stellen Sie sich vor, das war ein Big Block und nicht eine Zeile, wird es nicht nur nehmen unnötig wertvollen visuellen Raum , aber es wird auch sein härter zu halten und gewinnen Widersprüche .

Sie während mindestens einmal ausgeführt - lassen Sie das tun, während ... wo, wie beim Erfüllen der Bedingungen bei allen .. beginnen erfüllt erfordert

var i = 6;
do{
    alert(i);
}while( i < 5)

// alerts 6, but while criteria isn't met so it stops

var i = 6;
while( i < 5) {
  alert(i);
}

// no output - while condition wasn't met

Was ist mit:

do{

   //.....
   // 100000 lines of code!
   //.....

} while(i%10);




Natürlich können Sie nicht schreiben, dass:

//.....
// 100000 lines of code!
//.....

while(i%10){

   //.....
   // 100000 lines of code!
   //.....

} 



Und Sie werden dann eine do-while-Schleife zu verwenden, gezwungen werden,
God Bless it !!

Bearbeiten
Oder Sie Prozeduren verwenden ..

Der Unterschied ist sehr wichtig, wenn Sie mehr als eine Zeile Code haben mindestens einmal ausgeführt werden. eine do-Schleife mit einer while-Schleife Simulieren in erheblicher Code-Duplizierung führen würde, was immer schlecht ist. Zugegeben, eine bessere Lösung zu Refactoring ist, dass Code in eine Methode und dann einfach die gleiche Methodenaufruf haben vor und in der Schleife, aber viele Menschen nicht mögen sogar so viel Duplizierung und die do Schlüsselwort erklärt eindeutig: „Das ist ein Fuß gesteuert Schleife".

Also, im Grunde, Lesbarkeit und Grund SE Prinzipien.

Es ist ein besserer Weg, um Code zu schreiben:

int count = ReadDataFromStream();
while(count != 0)
{
    count = ReadDataFromStream();
}

geschrieben wird unter Verwendung von do-while wie:

int count = 0;
do
{
    count = ReadDataFromStream();
} while(count != 0);

Es gibt bessere Beispiele für do-while aber ich zu diesem Zeitpunkt nicht erinnern konnte.

Was Sie fehlt, ist, dass die Nutzung von do...while über 100% ist FALSCH

Eine do...while Schleife in Java zum Beispiel so etwas wie folgt aussieht:

do {
  //something you want to execute at least once
} while (someBooleanCondition);

Sehen Sie das vollständige Fehlen eines zweiten Blocks dort? Sehen Sie, wie die while Ende die Aussage vollständig? Also, was jetzt passiert ist, dass der Code in dem {...} Paar zwischen do und while erhalten ausgeführt, und someBooleanCondition wird geprüft erhalten und wenn es wahr ist, wird der Code-Block wieder ausgeführt werden soll. Und wieder. Und wieder. Bis someBooleanCondition wird getestet falsch.

Und an diesem Punkt vielleicht, werden Sie verstehen, warum wir beiden Formen der Schleife haben. Der obige Code übersetzt werden könnte:

//something you want to execute at least once
while (someBooleanCondition) {
  //something you want to execute at least once
}

Dieser Code jedoch erfordert, dass Sie das gleiche (möglicherweise groß und kompliziert) Code zweimal eingeben, die Tür für mehr Fehler offen zu lassen. Daraus ergibt sich die Notwendigkeit für eine Bottom-Testschleife anstelle eines Top-Testschleife.

Vor allem Ihrer do..while Syntax ist falsch. Es ist wie folgt:

do
{
  document.write("ok");
}while(x=="10");

Es ist nützlich, wenn Sie einmal, um den Körper der Schleife zumindest ausführen wollen, ohne seinen teminating Zustand zu bewerten. Zum Beispiel kann sagen, Sie eine Schleife schreiben mögen, wo Sie den Benutzer zur Eingabe veranlassen und in Abhängigkeit vom Eingang eines Code auszuführen. Sie würden wollen, dies mindestens einmal ausführen und dann die Benutzer fragen, ob er weitermachen will. In solchen Fällen do..while Schleife führt zu geringerem und saubereren Code im Vergleich zu einer while Schleife.

Obwohl

do { 
    s1;
    ...
    sn;
} while (p);

geschrieben werden als

boolean done = false;
while (!done) {
    s1;
    ...
    sn;
    done = !p;
}

ersteres ist verständlicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top