Was zu verwenden anstelle von Goto-Anweisungen?
Frage ich mich, was ich mit sollte anstelle von goto-Anweisungen?
Soll ich mich mit verschachtelten if/while/do-while-Anweisungen?
Sagen Sie, dass die Verwendung von goto schafft 'spaghetti-code', aber sicher, wenn jemand das schreiben einer großen Konsole-Anwendung, und Sie haben, wenn die Anweisung nach der if-Anweisung in einem Versuch, um die Ablaufsteuerung, das wird ein Durcheinander machen?
Ich bin zu Fragen, wie viele Menschen haben gefragt, warum die goto-Anweisung ist schlecht, aber nicht das, was es ersetzen mit. Ich bin sicher, dass viele Anfänger tun könnte.
Dies ist für C++.
- Von dem, was ich gesehen habe, Schleifen, Funktionen, oder RAII.
- Es hängt davon ab, was Sie derzeit mit goto-Anweisungen für. Zeig uns etwas code, oder beschreiben Sie, was Sie verwenden würden, ein springen für.
- nicht zu vergessen
switch
,break
,continue
usw. - Denken Sie daran, dass code Häufig ersetzt werden, und Umgekehrt. Zum Beispiel, wenn der Kontrollfluss wird entweder in Zweig A oder Zweig B eines if-else, dann entspricht dies einer boolean-variable
condition_A_is_true
. Und Umgekehrt. Ein großer Schalter entspricht oft einem array. So weiter. - Herzlichen Glückwunsch, Sie haben ein Sturm! Wenn Sie möchten, um mehr Infos zu bekommen, schauen Sie bitte auf die Wikipedia-Seite "Springen"
- mögliche Duplikate von Alternative Möglichkeit für goto-Anweisung in C++
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist viel besser mit Funktionen, Schleifen und bedingte Anweisungen. Verwenden Sie Pause und weiter als notwendig.
Kann ich fast garantieren Sie jede situation, in der Sie unter Verwendung von goto gibt es eine bessere alternative. Es gibt eine Bemerkenswerte Ausnahme: multi-level-Pause.
In dieser (relativ) seltene situation, kann goto verwendet werden, anstatt eine typische "Pause" zu machen, klar, wir sind eigentlich immer aus einer geschachtelten Schleife. Der andere Weg, dies zu nähern, ist mit einem "fertig" - Variablen:
Wie Sie sehen können, die fertig-variable ist Ausführlicher, wenn Sie zusätzliche Verarbeitung in der äußeren Schleifen, so ein goto ist ein sauberer Weg von breaking free!
Jedoch in 99% der Fälle Sie wirklich, wirklich nicht wollen, um mit dem schreiben beginnen eine Reihe von goto-Anweisungen. Wirklich denken Sie durch jeden.
Mit Funktionen, die oben könnte auch geschrieben werden, etwa so:
Manchmal brechen einer inneren Schleife heraus auf diese Weise können chaotisch sein, wenn es gibt eine Menge von Abhängigkeiten auf das äußere. Aber es bleibt ein gangbarer Weg, ausbrechen von code frühzeitig mit return-Anweisungen anstelle von goto oder Pause.
goto
s, aber das scheint nicht der Fall zu sein. Wenn Sie möchten, um dieses zu demonstrieren, vielleicht ein Beispiel, dass nicht das Gegenteil beweisen! 🙂goto
Lösung, jenseits von religiösen Gründen.Wenn Sie können schreiben Sie Ihre Logik über ein sauberes, modernes bauen, dann verwenden Sie es. Ansonsten, wenn
goto
Sinn macht, es zu benutzen.Im Allgemeinen
goto
machen den code schwerer zu Lesen und Folgen Sie den Fluss der code. Aus diesem Grund, newbies sind erzählt zu vermeidengoto
insgesamt. Das ermutigt Sie zu denken, in Bezug auf die anderen Konstrukte.Aber einige Leute, die nur religiöse über es. Codierung ist keine religion. Und wenn ein
goto
sinnvoll, C++ hat eine perfekt gültigegoto
Aussage, und Sie sollten es verwenden, wenn es sinnvoll ist.Es hat keinen Sinn, mich zu Fragen, was Sie verwenden sollten, anstatt
goto
. Sie können in der Regel verwenden Sie irgendeine Art von Schleife oder andere konstruieren, je nachdem, was Sie tun. Aber wogoto
Sinn macht, es zu benutzen.Nicht auf Leute hören die sagen "nie verwenden
goto
". Du hast ganz Recht, dass es Fälle gibt, wo die Verschachtelung Gültigkeitsbereich Blöcke wird eine verdammt viel mehr Verwirrung, als eingoto
. Es hat seinen Platz, genauso wie einswitch
/case
tut. Jedoch, mit Funktionen, die Sie oft umgestalten, entfernt die gesamte argument und halten die Menschen glücklich.goto
nicht den code besser 100% der Zeit.goto
. Es war einfach "so, sollten wir lieber vermeiden springen, was mache ich, statt? Sagen: "nee, gehen Sie vor und verwenden gotos" fehlt der Punkt, nicht die Frage zu beantworten, und führte ihn in die falsche Richtunggoto
hat es gültig verwendet (auch wenn diese selten sind). Kein Grund, downvote!goto
, und die Antwort, die besagt, dass eine solche Beratung ist nicht immer eine Lösung. So in der Art wie ein XY-problem, wenn man so will. Natürlich auch das Gegenteil ist nicht immer (praktisch nie) wahr, und die Frage noch immer gilt für, dass.Einfach vergessen, dass es die goto-Anweisung in C++ und es wird nicht Fragen, wie ersetzen Sie die springen.:)
Als für mich ich nie sehen, einen code mit goto-Anweisung, die ich nennen könnte es als einen guten code. In der Regel eine goto-Anweisung ist die Quelle von einigen Arten von Fehlern und Schwierigkeiten. Besonders ist es schwierig, zu ändern, einen solchen code. Außerdem eine goto-Anweisung beginnt in der Regel zu anderen goto-Anweisungen in den code.:)
Den
goto
ist schlecht, weil es Ihnen erlaubt, um zu springen aus Ihr von Kontext zu Kontext. Der Kontext ist ein Vektor, der alle Variablen (mit Ihren Werten) an einem bestimmten Punkt Ihres Programms. Ein Programm Ausführung graph zeigt Ihnen, wie Sie Ihr Programm wechselt von Kontext zu Kontext. Es ist in Ihrem besten Interesse zu halten, die Ausführung Graphen so einfach wie möglich. Die einfachste ist eine Kette, der nächste Schritt ist eine Ausführung Baum. Eine Schleife erhöht die Komplexität, aber es ist ein verwaltet Komplexität. Wenn Sie einen Knoten in Ihrer Ausführung Graphen, die erreichbar ist über mehr als einem Ausführungspfad, und Sie müssen verstehen, ein Zusammenhang zu diesem Knoten, dann müssen Sie mehr als eine Ausführung der Weg zurück. Diese "merge nodes" hinzufügen, eine Menge, um die Komplexität des Programms. Jede Anweisung mit Bezeichnung (diegoto
Ziel) ist eine mögliche merge-Knoten.Also, versuchen Sie nicht verwenden die
goto
Betreiber überhaupt - die Sprache selbst wird Kraft Sie zu finden, eine einfach zu verwaltende Lösung mit Schleifen, Boolesche Variablen, Klassen, Funktionen etc. und Ihr Programm wird mehr klar und verständlich. C++ exceptions ist ein weiteres überschaubar zu springen zwischen verschiedenen Kontexten.Gibt es-computing-Genies, wer kann halten im Verstand und im Prozess sehr Komplex Ausführung Graphen, so dass Sie don ' T Pflege viel über die Komplexität Ihrer Programme oder next-Programmierer, die zugewiesen werden, zu unterstützen oder zu übernehmen, Ihren code in die Zukunft. Ich denke, wir haben einige davon hier 🙂
goto
- und Etiketten-Platzierung.goto
- und niemand beschwert sich darüber, dassgoto