goto
wird fast allgemein abgeraten. Lohnt es sich jemals, diese Anweisung zu verwenden?
Kommentare
- xkcd.com/292
-
goto
ist das, was die CPU letztendlich tut, aber es funktioniert nicht gut mit dem, was Menschen verstehen und abstrahieren müssen, da das Ziel keine Markierung aufweist Ende. Vergleiche mit IntercalCOMEFROM
. - @Thorbj ø rnRavnAndersen, was Menschen sonst noch bedeuten, wenn sie ‚ sprechen Sie über Zustandsübergänge in einer Zustandsmaschine? Kann ‚ keine Ähnlichkeit festgestellt werden? “ Wechseln Sie zu einem bestimmten Zustand „, dem ‚ s was es bedeutet und alles andere wäre nichts anderes als eine unnötige Komplikation einer so trivialen Sache. Und was meinst du mit “ no mark „? Label ist eine solche Marke.
- @ SK-Logik, hängt davon ab, wie weit Sie von goto ‚ s kommen dürfen. Für die Implementierung von Zustandsautomaten ist kein Goto erforderlich.
- @Thorbj ø rnRavnAndersen,
goto
ist natürlich nicht erforderlich. Es ist nur die rationalste Art, sie in den imperativen Sprachen umzusetzen, da sie der Semantik des Staatsübergangs am nächsten kommt. Und sein Ziel kann ziemlich weit von der Quelle entfernt sein, es wird ‚ die Lesbarkeit nicht beeinträchtigen. Mein Lieblingsbeispiel für einen solchen Code ist D.E. Knuth ‚ s Implementierung des Abenteuerspiels.
Antwort
Dies wurde mehrmals über den Stapelüberlauf diskutiert, und Chris Gillum fasste die möglichen Verwendungen von goto
zusammen:
Eine Funktion sauber beenden
In einer Funktion können Sie häufig Ressourcen zuweisen und müssen an mehreren Stellen beendet werden. Programmierer können ihren Code vereinfachen, indem sie den Ressourcenbereinigungscode am Ende der Funktion einfügen. Alle “ Ausstiegspunkte “ der Funktion werden angezeigt das Bereinigungsetikett. Auf diese Weise müssen Sie nicht an jedem “ Austrittspunkt “ der Funktion Bereinigungscode schreiben.
Beenden verschachtelter Schleifen
Wenn Sie sich in einer verschachtelten Schleife befinden und aus usbrechen müssen Bei allen Schleifen kann ein goto dies viel sauberer und einfacher machen als break-Anweisungen und if-Checks.
Leistungsverbesserungen auf niedriger Ebene
Dies gilt nur für perf-kritischen Code, aber goto-Anweisungen werden sehr schnell ausgeführt und können Ihnen beim Durchlaufen einer Funktion einen Schub geben. Dies ist jedoch ein zweischneidiges Schwert, da ein Compiler normalerweise keinen Code optimieren kann, der gotos enthält.
Ich würde argumentieren, wie viele andere argumentieren würden , dass in all diesen Fällen die Verwendung von goto
als Mittel verwendet wird, um aus einer Ecke herauszukommen, in die man sich selbst codiert hat, und im Allgemeinen ein Symptom für Code ist, der überarbeitet werden könnte .
Kommentare
- Das erste Problem wird sehr sauber durch
finally
-Blöcke in modernen Sprachen gelöst, und Die zweite wird durch die Bezeichnungbreak
s gelöst. Wenn Sie ‚ jedoch an C festhalten,goto
ist so ziemlich die einzige Möglichkeit, diese Probleme elegant zu lösen. - Sehr gute Punkte. Mir gefällt, wie Java das Ausbrechen mehrerer Schleifenebenen ermöglicht.
- @Chinmay – schließlich nur Blöcke gelten für 1) moderne Sprachen, in denen sie vorhanden sind, und b) Sie können den Overhead tolerieren (die Ausnahmebehandlung hat einen Overhead. ) Das heißt, die Verwendung von
finally
ist nur unter diesen Bedingungen gültig. Es gibt sehr seltene, aber gültige Situationen, in denen ein Goto der richtige Weg ist. - Okay Leute … was zum Teufel ist der Unterschied zwischen
break 3
oderbreak myLabel
undgoto myLabel
. Oh, dass ‚ genau das richtige Schlüsselwort ist. Wenn Siebreak
,continue
oder ein ähnliches Schlüsselwort verwenden, verwenden Sie eingoto
(Wenn Siefor, while, foreach, do/loop
verwenden, verwenden Sie einen bedingten Goto.) - Informationen zur Leistung auf niedrigem Niveau – Das Verhalten eines modernen Prozessors ist möglicherweise schwer vorherzusagen (Pipeline, Ausführung außerhalb der Reihenfolge), so dass es sich in 99% der Fälle wahrscheinlich nicht lohnt oder sogar langsamer ist. @MatthewWhited: Scoping. Wenn Sie den Bereich an einem beliebigen Punkt eingeben, ist (für den Menschen) nicht klar, welche Konstruktoren aufgerufen werden sollen (das Problem besteht auch in C).
Antwort
Kontrollflusskonstrukte auf höherer Ebene entsprechen in der Regel Konzepten im Problembereich. Ein if / else ist eine Entscheidung, die auf einer bestimmten Bedingung basiert. Eine Schleife fordert Sie auf, eine Aktion wiederholt auszuführen. Sogar eine break-Anweisung besagt, dass „wir dies wiederholt getan haben, aber jetzt müssen wir aufhören“.
Eine goto-Anweisung entspricht dagegen eher einem Konzept im laufenden Programm, nicht im Problemdomäne. Es heißt, die Ausführung an einem bestimmten Punkt im Programm fortzusetzen. Jemand, der den Code liest, muss ableiten , was dies in Bezug auf die Problemdomäne bedeutet.
Natürlich können alle übergeordneten Konstrukte in Form von gotos und einfachen bedingten Verzweigungen definiert werden . Das bedeutet nicht, dass sie nur verkleidet sind. Stellen Sie sich diese als eingeschränkte Gotos vor – und es sind die Einschränkungen, die sie nützlich machen. Eine break-Anweisung wird als Sprung zum Ende der umschließenden Schleife implementiert, aber es ist besser als gedacht Arbeiten an der gesamten Schleife.
Wenn alles andere gleich ist, ist Code, dessen Struktur die der Problemdomäne widerspiegelt, in der Regel einfacher zu lesen und zu warten.
Es gibt keine Fälle, in denen Eine goto-Anweisung ist unbedingt erforderlich (es gibt einen Satz zu diesem Zweck), aber es gibt Fälle, in denen dies die am wenigsten schlechte Lösung sein kann. Diese Fälle variieren von Sprache zu Sprache, abhängig davon, welche übergeordneten Konstrukte die Sprache unterstützt.
In C gibt es beispielsweise drei grundlegende Szenarien, in denen ein Goto angemessen ist.
- Ausbrechen einer verschachtelten Schleife. Dies wäre unnötig, wenn die Sprache eine beschriftete break-Anweisung hätte.
- Aus einem Codeabschnitt (normalerweise einem Funktionskörper) im Falle eines Fehlers oder eines anderen unerwarteten Ereignisses aussteigen . Dies wäre unnötig, wenn die Sprache Ausnahmen hätte.
- Implementierung einer expliziten endlichen Zustandsmaschine. In diesem Fall (und ich denke nur in diesem Fall) entspricht ein goto direkt einem Konzept in der Problemdomäne, das von einem Zustand in einen bestimmten anderen Zustand übergeht, in dem der aktuelle Zustand dargestellt wird, durch den der Codeblock gerade ausgeführt wird .
Andererseits kann eine explizite endliche Zustandsmaschine auch mit einer switch-Anweisung innerhalb einer Schleife implementiert werden. Dies hat den Vorteil, dass jeder Status an derselben Stelle im Code beginnt, was beispielsweise beim Debuggen hilfreich sein kann.
Die Hauptverwendung eines goto in einer einigermaßen modernen Sprache (eine, die if / unterstützt else and loops) simuliert ein Kontrollflusskonstrukt, das in der Sprache fehlt.
Kommentare
- Dies ist tatsächlich die bisher beste Antwort – ziemlich überraschend für eine Frage, die eineinhalb Jahre alt ist .:-)
- +1 bis “ beste Antwort bisher „. — “ Die Hauptverwendung eines goto in einer einigermaßen modernen Sprache (eine, die if / else und Schleifen unterstützt) ist die Simulation eines Kontrollflusses Konstruieren Sie, dass ‚ in der Sprache fehlt. “
- In der switch-Anweisung-Zustandsmaschine wird jedes Schreiben in die Der Steuerwert ist wirklich ein
goto
. SSSM ‚ s sind oft gute Strukturen, da sie sehen Parieren Sie den SM-Status aus dem Ausführungskonstrukt, aber ‚ eliminiert “ gotos „. - “ Wenn alles andere gleich ist, ist Code, dessen Struktur die der Problemdomäne widerspiegelt, leichter zu lesen und zu warten. “ Ich ‚ habe dies lange Zeit vollständig gewusst, aber es fehlten die Worte, um es so präzise auf eine andere Weise zu kommunizieren Programmierer können und werden es tatsächlich verstehen. Vielen Dank dafür.
- Der “ strukturierte Programmsatz “ amüsiert mich, da er dazu neigt, das klar zu demonstrieren Zeigen Sie, dass die Verwendung strukturierter Programmieranweisungen zum Emulieren eines goto viel weniger lesbar ist als die Verwendung eines goto!
Antwort
Sicher hängt es von der Programmiersprache ab. Der Hauptgrund, warum goto
umstritten war, sind die negativen Auswirkungen, die auftreten, wenn der Compiler Sie zu großzügig verwenden lässt. Probleme können beispielsweise auftreten, wenn Sie goto
so verwenden können, dass Sie jetzt auf eine nicht initialisierte Variable zugreifen können, oder schlimmer noch, um in eine andere Methode zu springen und den Aufruf zu verwirren Stapel. Es sollte in der Verantwortung des Compilers liegen, unsinnigen Kontrollfluss zu verbieten.
Java hat versucht, dieses Problem zu „lösen“, indem es goto
vollständig verbietet. Mit Java können Sie jedoch return
in einem finally
-Block verwenden und so eine Ausnahme versehentlich verschlucken.Das gleiche Problem besteht immer noch: Der Compiler erledigt seine Arbeit nicht. Das Entfernen von goto
aus der Sprache hat das Problem nicht behoben.
In C # ist goto
so sicher wie break
, continue
, try/catch/finally
und return
. Sie können keine nicht initialisierten Variablen verwenden, Sie können nicht aus einem finally-Block herausspringen usw. Der Compiler wird sich beschweren. Dies liegt daran, dass es das echte Problem löst, das wie gesagt einen unsinnigen Kontrollfluss darstellt. goto
bricht die Analyse bestimmter Zuweisungen und andere vernünftige Compilerprüfungen nicht auf magische Weise ab.
Kommentare
- Ihr Punkt ist, dass C # ‚ s
goto
nicht böse ist? Wenn ja, ist dies für jede routinemäßig verwendete moderne Sprache mit einemgoto
-Konstrukt der Fall, nicht nur für C # …
Antwort
Ja. Wenn Ihre Schleifen mehrere Ebenen tief verschachtelt sind, ist goto
die einzige Möglichkeit, elegant aus einer inneren Schleife auszubrechen. Die andere Möglichkeit besteht darin, ein Flag zu setzen und aus jeder Schleife auszubrechen, wenn dieses Flag eine Bedingung erfüllt. Das ist wirklich hässlich und ziemlich fehleranfällig. In diesen Fällen ist die goto
einfach besser.
Natürlich macht die Java-Anweisung break
dasselbe Sache, aber ohne dass Sie zu einem beliebigen Punkt im Code springen können, wodurch das Problem sauber gelöst wird, ohne die Dinge zuzulassen, die goto
böse machen.
Kommentare
- goto ist niemals eine elegante Antwort. Wenn Ihre Schleifen mehrere Ebenen tief verschachtelt sind, besteht Ihr Problem darin, dass Sie Ihren Code nicht entworfen haben, um die mehrfach verschachtelten Schleifen zu vermeiden. Prozeduraufrufe sind NICHT der Feind. (Lesen Sie die “ Lambda: The Ultimate … “ -Papiere.) Verwenden Sie ein goto, um aus mehreren verschachtelten Schleifen auszubrechen Ebenen tief setzt ein Pflaster auf eine offene Mehrfachfraktur: Es mag einfach sein, aber es ist nicht ‚ nicht die richtige Antwort.
- Und natürlich dort Ist dies niemals der seltsame Fall, wenn tief verschachtelte Schleifen erforderlich sind? Ein guter Programmierer zu sein, ist nicht Es geht nicht nur darum, die Regeln zu befolgen, sondern auch zu wissen, wann sie zu brechen sind.
- @ JohnR.Strohm Sag niemals nie. Wenn Sie Begriffe wie “ nie “ in der Programmierung verwenden, haben Sie ‚ eindeutig nicht behandelt Mit Eckfällen, Optimierung, Ressourcenbeschränkungen usw. In tief verschachtelten Schleifen ist goto in der Tat die sauberste und eleganteste Möglichkeit, die Schleifen zu verlassen. Ist ‚ egal, wie sehr Sie ‚ Ihren Code überarbeitet haben.
- @ JohnR.Strohm: Am zweithäufigsten übersehen Funktion beim Umschalten von VB.NET auf C #: die
Do
-Schleife. Warum? Weil ich die eine Schleife, die einen tiefen Bruch benötigt, in eineDo
-Schleife ändern undExit Do
eingeben kann und dort ‚ s noGoTo
. Verschachtelte Schleifen treten ständig auf. Das Brechen der Stapel geschieht in einigen% der Fälle. - @ JohnR.Strohm Der einzige Grund, warum Sie “ goto sagen, ist niemals eine elegante Antwort “ ist, weil Sie sich entschieden haben, dass goto niemals eine elegante Antwort ist, und daher kann jede Lösung, die goto verwendet, keine elegante Antwort sein.
Antwort
Der größte Teil der Entmutigung kommt von einer Art „Religion“, die in der Nähe von Gott Djikstra geschaffen wurde, der in den frühen „60er Jahren die wahllose Macht dazu zwang“ :
- Springe irgendwo in einen beliebigen Codeblock
- , der nicht von Anfang an ausgeführt wurde.
- Schleifen, die nicht von Anfang an ausgeführt wurden
- Übersprungene Variableninitialisierung
- Springen Sie ohne mögliche Bereinigung von einem beliebigen Codeblock weg.
Dies hat nichts mehr mit goto
Aussage der modernen Sprachen, deren Existenz lediglich auf die Unterstützung des cr zurückzuführen ist Essen von anderen Codestrukturen als den von der Sprache bereitgestellten.
Insbesondere ist der erste Hauptpunkt oben nicht mehr zulässig und der zweite wird bereinigt (wenn Sie goto
verlassen In einem Block wird der Stapel ordnungsgemäß abgewickelt und alle geeigneten Destruktoren aufgerufen.)
Sie können auf diese Antwort verweisen , um eine Vorstellung davon zu erhalten, wie gerade Code nicht funktioniert Die Verwendung von goto kann unlesbar sein. Das Problem liegt nicht an sich selbst, sondern an der schlechten Verwendung.
Ich kann ein ganzes Programm schreiben, ohne if
zu verwenden, sondern nur . Natürlich wird es nicht gut lesbar sein, ein ungeschicktes und unnötig kompliziertes Aussehen.
Aber das Problem ist nicht for
. Da ich bin.
Dinge wie break
, continue
, throw
, bool needed=true; while(needed) {...}
usw. bemerken mehr als Maskerade goto
, um den Scimitaren der dschikstrarischen Eiferer zu entkommen, dass – 50 Jahre nach der Erfindung der modernen Sprachen wollen sie immer noch ihre Gefangenen. Sie vergaßen, wovon Djikstra sprach, sie erinnerten sich nur an den Titel seiner Notiz (GOTO wurde als schädlich angesehen, und es war nicht einmal sein einziger Titel: er wurde vom Herausgeber geändert) und beschuldigten und verprügelten, verprügelten und beschuldigten jeden Konstrukt, der diese 4 hatte Buchstabe nacheinander platziert.
Es ist 2011: Es ist Zeit zu verstehen, dass goto
sich mit der GOTO
Aussage, über die Djikstra überzeugte.
Kommentare
- “ Dinge wie break, continue , werfen, bool benötigt = wahr; während (benötigt) {…} usw. mehr als Maskerade bemerken, gehe zu “ Ich stimme ‚ dem nicht zu. Ich würde es vorziehen, “ Dinge wie break usw. sind eingeschränkt , gehe zu “ oder so ähnlich. Das Hauptproblem bei goto ist, dass es normalerweise zu mächtig ist. In dem Maße, in dem das aktuelle goto weniger leistungsfähig ist als das von Dijkstra ‚, ist Ihre Antwort für mich in Ordnung.
- @MuhammadAlkarouri: Ich stimme vollkommen zu. Sie haben gerade einen besseren Wortlaut gefunden, um genau mein Konzept auszudrücken. Mein Punkt ist, dass diese Einschränkung manchmal nicht anwendbar sein kann und die Art der Einschränkung, die Sie benötigen, nicht in der Sprache ist. Dann ist eine weniger pezialisierte “ “ Sache, die weniger spezialisiert ist, die Möglichkeit, das Problem zu umgehen. Beispielsweise ist Java
break n
in C ++ nicht verfügbar, dahergoto escape
, selbst wennescape
muss nicht nur aus der n-ple-Schleife entfernt sein.
Antwort
Das ungerade Goto hier oder dort, solange es lokal für eine Funktion ist, beeinträchtigt es die Lesbarkeit selten erheblich. Oft wird es dadurch vorteilhaft, dass auf die Tatsache hingewiesen wird, dass in diesem Code etwas Ungewöhnliches vor sich geht, das die Verwendung einer etwas ungewöhnlichen Kontrollstruktur erfordert .
Wenn (lokale) gotos die Lesbarkeit erheblich beeinträchtigen, ist dies normalerweise ein Zeichen dafür, dass die Funktion, die das goto enthält, zu komplex geworden ist.
Das letzte goto, das ich in a eingefügt habe Ein Teil des C-Codes bestand darin, ein Paar ineinandergreifender Schleifen zu erstellen. Es passt nicht in die normale Definition von „akzeptabel“, aber die Funktion wurde dadurch wesentlich kleiner und klarer. Um dies zu vermeiden, wäre eine besonders unordentliche Verletzung von DRY erforderlich gewesen.
Kommentare
- Die Antwort darauf wird im alten “ Lay ‚ Kartoffelchips “ Slogan: “ Ich wette, Sie können ‚ nicht nur eine “ essen. In Ihrem Beispiel haben Sie zwei “ ineinandergreifende “ (was auch immer das bedeutet, und ich ‚ Ich wette, es ist keine ‚ t hübsche) Schleife, und das goto hat dir einen billigen Out gegeben. Was ist mit dem Wartungsmann, der diesen Code ändern muss, nachdem Sie von einem Bus angefahren wurden? Wird der Goto sein Leben leichter oder schwerer machen? Müssen diese beiden Schleifen überdacht werden?
Antwort
Ich denke, dieses ganze Problem war ein Fall von Bellen der falsche Baum.
GOTO als solches scheint mir nicht problematisch, sondern ist sehr oft ein Symptom für eine tatsächliche Sünde: Spaghetti-Code.
Wenn das GOTO verursacht Hauptkreuzung von Flusskontrollleitungen, dann ist es schlecht, Punkt. Wenn es keine Flusskontrolllinien kreuzt, ist es harmlos. In der Grauzone dazwischen gibt es Dinge wie Loop-Bailouts. Es gibt immer noch einige Sprachen, die keine Konstrukte hinzugefügt haben, die alle legitimen Graufälle abdecken.
Der einzige Fall, in dem ich sie tatsächlich verwendet habe In vielen Jahren ist dies der Fall bei der Schleife, bei der sich der Entscheidungspunkt in der Mitte der Schleife befindet. Sie haben entweder doppelten Code, ein Flag oder ein GOTO. Ich finde die GOTO-Lösung die beste der drei. Hier gibt es keine Kreuzung von Flusskontrolllinien, sie ist harmlos.
Kommentare
- Der Fall, auf den Sie anspielen, wird manchmal als „eineinhalb Schleifen“ oder „N plus eine halbe Schleife“ bezeichnet und ist ein berühmter Anwendungsfall für s, die in eine Schleife springen (sofern die Sprache dies zulässt; da der andere Fall, in der Mitte aus der Schleife zu springen, normalerweise ohne
goto
trivial ist ). - (Leider verbieten die meisten Sprachen das Springen in eine Schleife.)
- @KonradRudolph: Wenn Sie die “ -Schleife “ Mit GOTO gibt es keine andere Schleifenstruktur, in die gesprungen werden kann.
- Ich denke,
goto
ruft MUSTER . Da Kontrollflüsse, die zu strukturierten Programmiermustern passen, leichter zu überlegen sind als solche, die nicht ‚ t sind, sollte man versuchen, solche Muster nach Möglichkeit zu verwenden. Wenn Code zu solchen Mustern passt, sollte man nicht ‚ schreien, dass er nicht ‚ t ist. Andererseits kann es in Fällen, in denen Code ‚ nicht zu solchen Mustern passt, besser sein, darüber zu schreien, als vorzutäuschen, dass der Code passt, wenn er wirklich nicht ‚ t. - @supercat Stellen Sie sich vor, Sie haben sich einen Zeitplan geschrieben, und der Wind bläst ihn Ihnen aus den Händen. Gemäß Ihrer Logik sollten Sie ‚ nicht abrufen, da die Verfolgung Ihres Zeitplans nicht ‚ t in Ihrem Zeitplan war.
Antwort
Ja, das goto kann verwendet werden, um die Erfahrung des Entwicklers zu verbessern: http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/
Wie bei jedem leistungsstarken Tool (Zeiger, Mehrfachvererbung usw.) muss man jedoch diszipliniert sein es benutzen. Das im Link bereitgestellte Beispiel verwendet PHP, wodurch die Verwendung des goto-Konstrukts auf dieselbe Funktion / Methode beschränkt wird und die Möglichkeit deaktiviert wird, in einen neuen Steuerblock (z. B. Schleife, switch-Anweisung usw.) zu springen.
Antwort
Abhängig von der Sprache. Es ist zum Beispiel in der Cobol-Programmierung immer noch weit verbreitet. Ich habe auch an einem Barionet 50-Gerät gearbeitet, dessen Firmware-Programmiersprache ein früher BASIC-Dialekt ist, für den Sie natürlich Goto verwenden müssen.
Antwort
goto
kann hilfreich sein, wenn älterer Assembler-Code nach C portiert wird. Die Konvertierung von Anweisungen nach C unter Verwendung von goto
als Ersatz für die Anweisung branch
des Assemblers kann eine sehr schnelle Portierung ermöglichen.
Kommentare
- Richtig, aber eines der Argumente gegen
goto
s ist, dass sie Compiler-Optimierungen vereiteln. - @Sapphire_Brick: Viele Compiler-Optimierungen basieren auf bestimmten Ausführungsmustern. Wenn die auszuführende Aufgabe ‚ nicht zu den unterstützten Ausführungsmustern passt, “ vereitelt “ Optimierungen möglicherweise nicht sei eine schlechte Sache.
Antwort
Ich würde nein argumentieren. Sie sollten immer durch ein Tool ersetzt werden, das spezifischer für das Problem ist, für dessen Lösung das goto verwendet wird (es sei denn, es ist in Ihrer Sprache nicht verfügbar). Beispielsweise lösen break-Anweisungen und Ausnahmen zuvor gelöste Probleme beim Entweichen von Schleifen und Fehlerbehandlung.
Kommentare
- Ich ‚ würde argumentieren, wenn Sprachen beide
Bei diesen Funktionen fehlt goto
normalerweise in diesen Sprachen. - Aber liegt das daran, dass sie nicht ‚ sind Brauchen Sie sie nicht oder weil Leute denken, dass sie sie nicht ‚ brauchen?
- Ihre Ansichten sind bigott. Es gibt viele Fälle, in denen
goto
kommt der Semantik der Problemdomäne am nächsten, alles andere wäre ein schmutziger Hack. - @ SK-Logik: Ich habe ‚ Ich glaube nicht, dass das Wort “ bigott “ bedeutet, was Sie denken, dass es bedeutet.
- @ Keith,
intolerant seinen eigenen Meinungen und Vorurteilen gewidmet “ – das ‚ ist was ich Beobachten Sie hier konsequent, mit diesem Los mit verbundenen Augen. “ Sollte immer ersetzt werden “ sind fanatisch ‚ s zumindest Worte. Nichts, was einer richtigen, vernünftigen Meinung nahe kommt, sondern nur eine reine Bigotterie. Diese “ immer “ lässt keinen Platz für eine alternative Meinung, siehe?
Antwort
Ich würde nein sagen. Wenn Sie die Notwendigkeit der Verwendung von GOTO feststellen, muss der Code wahrscheinlich neu gestaltet werden.
Kommentare
- Vielleicht, aber Sie Habe ‚ keine Begründung geliefert
- Dijkstra hat die Begründung vor Jahrzehnten ausführlich geliefert.
- Nur Dogma. Keine Gründe. Hinweis: Djikstra ist KEIN GÜLTIGER RESON mehr: Es bezog sich auf die BASIC- oder FORTRAN GOTO-Anweisung der frühen ‚ 60er Jahre. Sie haben nichts mit den wirklich anämischen (im Vergleich zu der Macht dieser) Gots von heute zu tun.
- @EmilioGaravaglia Nun, der Teil seiner Argumentation, der bis heute gilt, ist, dass es ‚ sehr einfach ist, Spaghetti-Code zu schreiben, indem man viele Gotos verwendet. Nach dieser Logik sollten wir jedoch ‚ keine Zeiger verwenden, da die Verwendung von so vielen Zeigern wie
number of gotos needed to create problems
ein ähnliches Chaos verursachen würde.