Warum Endlosschleifen verwenden?

8

Ein anderes Poster fragte nach bevorzugten Syntax für Endlosschleifen .

Eine Folgefrage: Warum verwenden Sie in Ihrem Code Endlosschleifen? Normalerweise sehe ich ein Konstrukt wie dieses:

%Vor%

Damit können Sie den Wert von scoped_variable in der for - oder while -Klausel nicht sehen. Was sind andere Anwendungen für "unendliche" Schleifen?

    
Moishe Lettvin 22.10.2008, 01:56
quelle

14 Antworten

27

Eine Schleife wie:

%Vor%

lässt Sie aus der Schleife in der Mitte ausbrechen, anstatt am Anfang (while / for) oder end (do-while).

Wenn Sie eine komplexe Bedingung haben, können Sie diesen Stil auch verwenden, um den Code übersichtlicher zu gestalten.

    
Tony Meyer 22.10.2008, 02:02
quelle
11

Ich benutze eine Endlosschleife für den Körper meines eingebetteten Steuercodes, da er so ausgelegt ist, dass er nach dem Start für immer läuft.

    
AShelly 22.10.2008 01:58
quelle
8

Endliche Automaten. Sie sollten nicht enden, bis Sie einen Endzustand erreicht haben, an welchem ​​Punkt Sie brechen oder zurückkehren.

    
Ignacio Vazquez-Abrams 22.10.2008 02:02
quelle
8
%Vor%

Bearbeiten: Das heißt, meine App basiert im Grunde genommen auf einer Endlosschleife, und ich kann mich nicht darum kümmern, alles umzuformatieren, nur um die ästhetische Reinheit zu haben, die immer mit dem Abfallen endet main ().

    
Menkboy 22.10.2008 02:03
quelle
4

Dies ist ein unvollständiges Beispiel, weil es als Endtestschleife ohne Verlust an Klarheit, Funktion oder Leistung neu strukturiert werden kann.

%Vor%

Endlosschleifen werden am häufigsten verwendet, wenn die Schleifeninstanz im einfachsten Fall oben oder unten nicht den Abschlußtest hat. Dies tritt auf, wenn die Schleife aus zwei Teilen besteht: Code, der jedes Mal ausgeführt werden muss, und Code, der nur zwischen jeder Iteration ausgeführt werden muss. Dies geschieht in Sprachen wie C, wenn man beispielsweise aus einer Datei liest oder ein Datenbankresultset verarbeitet, bei dem viel explizit gemacht werden muss. Die meisten Sprachen mit neueren Paradigmen können solchen Code tatsächlich in den Test integrieren.

    
staticsan 22.10.2008 02:08
quelle
3

Fast alle Apps verwenden eine unendliche Hauptschleife . ;)

    
Gary Willoughby 22.10.2008 08:50
quelle
3

Ich würde erwägen, eine Endlosschleife zu verwenden, um das Lenksystem einer Rakete zu programmieren.

%Vor%

Aus der Perspektive des Lenkrechners der Lenkwaffe wiederholt sich die einmal gestartete Schleife bis zum Ende der Zeit.

Vielleicht würden Puristen

bevorzugen %Vor%

Aber wie implementieren Sie dann die Methode blow2Bits? was würde es bedeuten, wenn blow2Bits wahr werden würde?

    
emory 27.05.2010 03:38
quelle
2

Ein Beispiel ist ein Nachrichtenpumpentyp-Szenario, in dem Sie für alle eingehenden Nachrichten eine Schleife erstellen möchten, bis die Nachricht beendet wird. Ein anderes ist, wenn Sie eine periodische Aktion ausführen möchten, dann könnten Sie eine Endlosschleife mit einem Schlaf darin schreiben (obwohl es besser sein könnte, eine Form von Timer dafür zu verwenden).

Es kann einige andere Stellen geben, an denen die Schleife eine bestimmte Menge an Arbeit ausführen muss, um zu bestimmen, ob sie beendet werden soll. Es ist möglicherweise sauberer, break zu verwenden, wenn diese Bedingung wahr ist, anstatt einige externe Flags zu setzen Geben Sie an, dass die Schleife beendet werden soll.

Obwohl ich denke, dass es besser ist, wenn möglich, die exit-Bedingung in die loop-Anweisung zu setzen, anstatt sie unendlich zu machen und die Schleife mit einer break -Anweisung zu verlassen, weil die Ausgangsbedingung der Schleife offensichtlicher ist.

    
Greg Beech 22.10.2008 02:03
quelle
1

Es gibt andere Fragen, die sich darauf beziehen, ob / wie es in Ordnung ist, break in einer Schleife zu verwenden. Nehmen wir an, wir stimmen zu, dass es manchmal in Ordnung ist. Unter diesen Umständen (hoffentlich selten) würde ich eine Endlosschleife verwenden, wenn es eine Reihe von Beendigungsbedingungen und keine identifizierbare "primäre" Beendigungsbedingung gibt.

Sie vermeidet eine lange Reihe von Disjunktionen (und / oder) und macht den Leser auf die Tatsache aufmerksam, dass (wahrscheinlich) Unterbrechungen in der Schleife auftreten können.

Letztendlich ist es eine Frage des Geschmacks.

    
Draemon 22.10.2008 02:16
quelle
1

Ich benutze sie, um Linux-Daemons / Dienste zu schreiben, die so lange durchlaufen werden, bis Kill / andere Terminierungssignale empfangen werden.

    
Chris Kloberdanz 22.10.2008 02:47
quelle
1

Unendliche Schleifen sind vor allem in Daemon / Service-Prozessen oder der Hauptschleife in einem Spiel nützlich. Sie können sogar mit ihnen niedlich werden, zB:

%Vor%

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

Wenn Sie jedoch in einer Situation sind, in der Ihr Tech-Lead sagt: "Endlos-Loops sind verboten, so gibt es mehrere Methoden- / Funktions-Returns und Breaks", können Sie auch so etwas tun:

%Vor%

Natürlich, wenn Sie von einem technischen Leiter gezwungen werden, solche Dinge zu tun, sollten Sie anfangen, nach einem neuen Job zu suchen.

Weitere Informationen zum Schlüsselwort continue finden Sie in diesem MSDN -Artikel.

    
orj 22.10.2008 08:43
quelle
1

Webserver verwenden eine unendliche while-Schleife:

%Vor%

Sie müssen nicht enden, wenn Sie Ihre Webserver-Anwendung nicht schließen.

    
user142019 26.07.2009 09:34
quelle
0

Ich habe sie benutzt, als ich auf mehrere Threads in c # gewartet habe, aber jetzt benutze ich die ThreadPool-Klasse.

    
Fry 22.10.2008 02:03
quelle
0

Anders als bei eingebetteten Systemen sind Endlosschleifen immer wirklich:

%Vor%

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

Es gibt Zeiten, in denen Trading-Klarheit für Geschwindigkeit Sinn macht, aber etwas, das weder Klarheit noch Geschwindigkeit bietet, nur um technisch korrekt zu sein? Klingt für mich eine schlechte Idee. Jeder kompetente Programmierer weiß, dass while (true) bedeutet, dass die Abbruchbedingung irgendwo innerhalb der Schleife liegt.

    
Loren Pechtel 22.10.2008 02:15
quelle

Tags und Links