Test Schleifen an den oberen oder unteren? (while vs. do while)

Wenn ich unter CS im college (Mitte der 80er), eine der Ideen, die sich ständig wiederholte, war zu schreiben immer Schleifen, die Prüfung an der Spitze (während...), anstatt am unteren Rand (do ... while) der Schleife. Diese Begriffe wurden oft gesichert mit verweisen auf Studien, die zeigten, dass Schleifen, die getestet an der Spitze waren statistisch viel wahrscheinlicher, korrekt zu sein, als Ihr Boden-Test-Pendants.

Folge, dass ich fast immer schreiben Schleifen, die den test an der Spitze. Ich Tue es nicht, wenn es führt zusätzliche Komplexität im code, aber in diesem Fall scheint selten. Ich merke, dass einige Programmierer neigen dazu, fast ausschließlich schreib-Schleifen-test auf der Unterseite. Wenn ich sehe, Konstrukte wie:

if (condition)
{
    do
    {
       ...
    } while (same condition);
}

oder die inverse (if innerhalb der while), es macht mich Frage mich, ob Sie tatsächlich schrieb, dass es der Weg oder wenn Sie Hinzugefügt, die if - Anweisung, wenn Sie realisierten, dass die Schleife gar nicht mit den null-Fall.

Habe ich getan einige googeln, aber nicht in der Lage zu finden keine Literatur zu diesem Thema. Wie könnt Ihr Jungs (und Mädels) schreiben Sie Ihre loops?

  • "statistisch viel wahrscheinlicher, korrekt zu sein:" Vergessen Sie die Statistik. Den Nachweis, ein top-of-the-loop-Bedingung ist einfach. Der Nachweis eines bottom-of-the-loop-Zustand ist sehr viel komplexer.
  • Verwandte Frage: stackoverflow.com/questions/224138/infinite-loops-top-or-bottom
  • Ich hatte ein CS-professor circa 1997 zu verkünden, dass Ihr zwei Möglichkeiten in der Programmierung waren C oder Pascal, und, dass Sie wählen sollten, Pascal, weil es nicht lassen Sie increment loop-Zähler aus der Schleife. Er könnte Recht gehabt haben, aber junge war er falsch.
  • RE "statistisch wahrscheinlicher, korrekt zu sein": Die Tatsache, dass etwas ist in der REGEL die richtige Antwort bedeutet nicht, es ist IMMER die richtige Antwort. Eines der am meisten repetively frustrierend Dinge, die ich dort finde, ist, dass einige intelligente person wird sagen, "X stellte sich heraus, um eine gute Lösung für viele Probleme", und dann ein paar andere Leute werden sagen: "Unser standard ist X. Sie müssen immer mit X, alle Probleme zu lösen." Wie, das Web ist eine großartige Lösung für viele Probleme. Aber eine Organisation, für die ich arbeitete beschlossen, dass daher ALLE neuen Anwendungen muss web-basiert.
  • Ich denke, die Implikation war, dass Sie eher die Einführung einer loop-Grenze Fehler über eine Boden-Tests-Schleife und sollte daher darauf achten, dass es die beste Art ist, um auszudrücken, einen Algorithmus. Nicht-verbieten Sie geradezu.
  • Okay. Wenn der Punkt ist der: die Programmierer Schraube bis DO/WHILEs oft mehr, als Sie es vermasseln Vanille WHILESs. Ich nehme an, es ist plausibel, dass Programmierer, die denken, Sie bekommen ein flag innerhalb einer DO/WHILE, wenn Sie wirklich nicht, während es weniger wahrscheinlich, um nicht über eine gültige Prüfung in einer Ebene WÄHREND. Ich bin mir nicht sicher, welchen Schluss Sie daraus ziehen, dass. Vorsichtiger sein, wenn dabei das TUN?
  • Kommen Sie, daran zu denken, ich habe noch nie gesehen, die do/while-in Produktion code.
  • VIELE Duplikate dieser Debatte: stackoverflow.com/questions/224059/..., stackoverflow.com/questions/390605/while-vs-do-while stackoverflow.com/questions/1035229/..., stackoverflow.com/questions/3094972/..., etc.
  • Oops. Ich habe Suche. Nicht zu gut, so scheint es.
  • Wow, das ist ein perfektes Beispiel, warum nicht exakten Duplikate dürfen nicht zusammengeführt werden. Sieht aus wie die Hälfte der Antworten sind ursprünglich gegeben worden ist, zu einer völlig anderen Frage, die entlang der Linien von "was ist der Unterschied". Ich fast downvoted einige von Ihnen, bevor ich realisiert es ist nicht die Antwort, die verdienen einen Ruf zu verlieren, aber der übereifrige moderator wer hat ganz gute Antworten und bewegt Sie, um eine unabhängige Frage, die Sie nicht beheben.
  • Was Konstrukt ist "statistisch wahrscheinlicher, korrekt zu sein" ist eine bizarre Kriterium. Was zählt, ist, "Was ist richtig für dieses spezielle problem?" Statistisch gesehen, den wir hinzufügen möchten, die mehr als oft wollen wir multiplizieren. Würden Sie deshalb sagen, dass jede Zeit, die Sie brauchen, zu rechnen, sollten Sie immer mit "+" und verwenden Sie niemals "*" da, "statistisch", dass Sie oft korrigieren hinzufügen? Oder, ich gehe in das Lebensmittelgeschäft mehr oft, dass ich das Auto dem Händler, daher jedes mal, wenn ich das Haus verlasse werde ich automatisch in den Supermarkt gehen-auch wenn das, was ich tun möchte, ist ein neues Auto kaufen.
  • Ich benutze do-while-Schleifen die ganze Zeit im optimierten code. Sie haben den Vorteil der Reduzierung der Maschine, code-Größe, indem Sie nicht duplizieren, die loop-check (hab ich oft gesehen-Reduktionen von 20% oder mehr) und die Verringerung der code-cache-Fuß drucken. Sie können prüfen, Wiederaufnahme dieser, so kann ich die post eine Antwort?

Schreibe einen Kommentar