10 Stimmen

Warum Endlosschleifen verwenden?

Ein anderer Poster fragte nach bevorzugte Syntax für Endlosschleifen .

Eine Folgefrage: Warum Verwenden Sie in Ihrem Code Endlosschleifen? Ich sehe normalerweise ein Konstrukt wie dieses:

for (;;) {
  int scoped_variable = getSomeValue();
  if (scoped_variable == some_value) {
    break;
  }
}

Damit kann man umgehen, dass man den Wert von scoped_variable nicht in der for o while Klausel. Welche anderen Verwendungsmöglichkeiten gibt es für "Endlosschleifen"?

1voto

orj Punkte 12656

Endlosschleifen sind vor allem in Daemon-/Dienstprozessen oder der Hauptschleife in einem Spiel nützlich. Man kann sich mit ihnen sogar etwas einfallen lassen, z. B:

const bool heatDeathOfTheUniverse = false;
do 
{
     // stuff
} while(!heatDeathOfTheUniverse);

Sie sollten no verwendet werden, um auf Dinge wie Threads zu "warten", wie es von Fry . Sie können dafür die Join-Methode eines Thread-Objekts verwenden.

Wenn Sie sich jedoch in einer Situation befinden, in der Ihr technischer Leiter sagt: "Endlosschleifen sind verboten, ebenso wie mehrfache Methoden-/Funktionsrückgaben und Abbrüche", können Sie auch solche Dinge tun:

bool done = false;
while(!done) 
{
    if(done = AreWeDone()) continue; // continue jumps back to start of the loop   
} 

Wenn Ihr technischer Leiter Sie zu solchen Dingen zwingt, sollten Sie sich natürlich nach einem neuen Job umsehen.

Für weitere Informationen zum Schlüsselwort continue siehe dieses MSDN Artikel.

1voto

Webserver verwenden eine unendliche while-Schleife:

while(true)
{
    //Do something like respond to requests
}

Sie müssen nicht beendet werden, es sei denn, Sie schließen Ihre Webserver-Anwendung.

0voto

Fry Punkte 3716

Früher habe ich sie verwendet, wenn ich in c# auf die Fertigstellung mehrerer Threads wartete, aber jetzt verwende ich die ThreadPool-Klasse.

0voto

Loren Pechtel Punkte 8729

Anders als bei eingebetteten Systemen sind Endlosschleifen eigentlich immer vorhanden:

Repeat
   Something
Until Exit_Condition;

Aber manchmal ist Exit_Condition nicht etwas, das am Ende der Schleife tatsächlich ausgewertet werden kann. Sie könnten immer ein Flag setzen, dieses Flag verwenden, um den Rest der Schleife zu überspringen, und es dann am Ende testen, aber das bedeutet, dass Sie es mindestens zweimal testen (der Code ist etwas langsamer), und ich persönlich finde es weniger klar.

Es gibt Zeiten, in denen es sinnvoll ist, Klarheit gegen Geschwindigkeit zu tauschen, aber etwas, das weder Klarheit noch Geschwindigkeit bietet, nur um technisch korrekt zu sein? Klingt für mich nach einer schlechten Idee. Jeder kompetente Programmierer weiß, dass while (true) bedeutet, dass die Abbruchbedingung irgendwo innerhalb der Schleife liegt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X