Warum verwenden Endlosschleifen?
Andere poster gefragt die bevorzugte syntax für Endlosschleifen.
Einer follow-up-Frage: Warum verwenden Sie Endlosschleifen im code? Ich in der Regel sehen, ein Konstrukt wie dies:
for (;;) {
int scoped_variable = getSomeValue();
if (scoped_variable == some_value) {
break;
}
}
Können Sie umgehen, die nicht in der Lage, um den Wert scoped_variable in der for
oder while
- Klausel. Was sind einige andere Verwendungen für die "unendliche" Schleifen?
- Verwandte Frage: stackoverflow.com/questions/224138/infinite-loops-top-or-bottom
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Schleife wie:
können Sie brechen aus der Schleife in der Mitte, anstatt am Anfang (while/for) oder am Ende (do-while).
Wenn Sie haben eine komplexe Erkrankung, können Sie auch wollen, verwenden Sie diesen Stil, um den code übersichtlicher.
Ich eine unendliche Schleife für den Körper meines embedded-control-code, da es ist entworfen, um zu laufen, für immer und sobald er gestartet ist.
Finite-state-machines. Sie sind eigentlich nicht zu Ende, bis Sie eine end-Zustand, an welcher Stelle Sie break oder return.
machine.state
variable an einem bestimmten Punkt in der Schleife.Edit: Das ist, meine app ist grundsätzlich um eine unendliche Schleife und ich kann nicht belästigt werden, umgestalten, alles nur um die ästhetische Reinheit der immer beenden, indem Sie fallen aus dem Ende von main().
Das ist ein unvollständiges Beispiel, weil es umgestaltet werden kann, um einen end-test-Schleife ohne Verlust an Klarheit, Funktion oder performance.
Unendlichen Schleifen werden Häufig verwendet, wenn die Schleife Instanz nicht haben die termination test an der Oberseite oder Unterseite, im einfachsten Fall. Dieser neigt zu geschehen, wenn es gibt zwei Teile auf der Schleife: code, der ausgeführt werden muss, jedes mal, und code, der muss nur ausgeführt werden, zwischen jeder iteration. Dieser neigt zu geschehen, in Sprachen wie C, wenn die Dinge zu tun, wie Lesen aus einer Datei oder der Verarbeitung einer Datenbank-resultset, in denen eine Menge getan werden muss, ausdrücklich. Die meisten Sprachen mit neueren Paradigmen können die Struktur solcher code tatsächlich in den test.
Fast alle apps unendliche Main-loop. 😉
Ich würde erwägen, eine Endlosschleife zu Programmieren, das Führungssystem einer Rakete.
Aus der Perspektive der Rakete guidance computer, wird die Schleife einmal gestartet hat wiederholen Sie bis zum Ende der Zeit.
Vielleicht einen Puristen wäre für
dann aber wie setzen Sie die blow2Bits Methode? was würde es bedeuten, wenn blow2Bits true zurückgegeben?
Ein Beispiel ist in ein Nachrichtensystem geben-Szenario, wo Sie wollen, um die Schleife für immer die Verarbeitung der Nachrichten, die zu uns kommen, bis gesagt, zu stoppen. Ein anderes ist es, wenn Sie wollen, um eine regelmäßige Aktion, dann könnten Sie schreiben, eine Endlosschleife mit sleep (auch wenn es vielleicht besser, irgendeine form der timer für diese).
Kann es einige andere Orte, wo die Schleife ist, zum ausführen einer bestimmten Menge an Arbeit, um zu bestimmen, ob es sollte beendet werden, und es könnte sauberer sein, nur zu verwenden
break
wenn diese Bedingung wahr ist vielmehr, als einige externe flag, um anzuzeigen, die Schleife beenden.Generell aber denke ich, dass es eine bessere Praxis, um Ihre exit-Bedingung in der loop-Anweisung, wenn möglich, eher als, um es unendlich, und beenden Sie die Schleife mit
break
- Anweisung, weil die exit-Bedingung der Schleife ist mehr offensichtlich.Gibt es andere Fragen, ob/Wann es ok ist zu verwenden
break
in einer Schleife. Nehmen wir an, wir Stimmen zu, dass es manchmal ok. Unter diesen Umständen (hoffentlich seltenen) ich würde eine unendliche Schleife, wenn es gibt eine Reihe von abschließenden Bedingungen und ohne erkennbare "primäre" abschließende Bedingung.Vermeidet es, eine lange Reihe von disjunktionen (oder) und zieht auch die Aufmerksamkeit des Lesers auf die Tatsache, dass es möglicherweise (fast sicher) werden Pausen in der Schleife.
Letztlich ist es eine Frage des Geschmacks.
Ich benutze Sie zum schreiben von Linux-daemons /Dienste, die Schleife, bis Sie zu töten /sonstigen Beendigung Signale empfangen werden.
Unendlichen Schleifen sind nützlich, meist in daemon/service-Prozessen oder die main-loop in einem Spiel. Sie können sogar nett mit Ihnen, wie zB:
Sollten Sie nicht verwendet werden, um zu "warten" für Dinge wie threads, da wurde vorgeschlagen, durch Braten. Sie können die Join-Methode eines thread-Objekt.
Jedoch, wenn Sie in einer situation, wo Ihre tech lead sagt, "unendliche Schleifen sind verboten & so sind mehrere Methode/Funktion gibt & Pausen" können Sie auch tun Sachen wie diese:
Natürlich, wenn Sie die tech-führen ist, die einen dazu zwingen, solche Dinge zu tun, sollten Sie beginnen, auf der Suche nach einem neuen job.
Für mehr details auf die continue-Schlüsselworts finden Sie unter dieser MSDN Artikel.
Webserver eine unendliche while-Schleife:
Haben Sie nicht zu Ende, es sei denn, Sie schließen Sie Ihre webserver-Anwendung.
Ich verwendet, um Sie beim warten auf mehrere threads komplett in c#, aber jetzt habe ich die Verwendung der ThreadPool-Klasse.
Andere als embedded-Systemen Situationen, in unendlichen Schleifen immer wirklich sind:
Aber manchmal Exit_Condition ist nicht etwas, das tatsächlich ausgewertet werden, die am Ende der Schleife. Man konnte immer ein flag zu setzen, verwenden Sie, die fahne zu überspringen den rest der Schleife und dann testen Sie es am Ende, aber das bedeutet, dass Sie testen es mindestens zweimal (der code ist etwas langsamer) und ich persönlich finde es weniger klar.
Gibt es Zeiten, wenn der Handel Klarheit für die Geschwindigkeit macht Sinn, aber gibt weder Klarheit noch Geschwindigkeit, nur um technisch korrekt? Klingt wie eine schlechte Idee zu mir. Jeder kompetente Programmierer weiß, dass while (true) bedeutet, dass die Abbruchbedingung ist irgendwo innerhalb der Schleife.