Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Zipfelpilz

unregistriert

11

10.06.2016, 14:07

Es gibt nur SEEEEEHR selten (bis gar nicht) wirkliche Situationen, in denen ein goto sinnvoll ist.

Gibt es nicht :) An sich gibt es für jeden Anwendungsfall von Goto vernünftigere schönere Lösungswege. Deshalb ist Goto ja mittlerweile kaum noch in Sprachen zu finden.

Es gibt schon Anwendungsfälle für goto, Schleifen sind ja auch nur Abstraktionen die auf goto aufbauen. Wenn die Abstraktion "Schleife" einen Anwendungsfall nicht ordentlich abdeckt, lohnt sich auch die Verwendung der konkreteren Konstrukte.

Möchte ich z.B. zwei ineinanderverschachtelte Schleifen vorzeitig beenden, könnte ich entweder ein Flag in beiden Schleifen testen, für n^2 zusätzliche Tests, oder einfach mit einem goto hinter die äußere Schleife springen. Ein goto ist in dem Fall die bessere Lösung. Ein anderes Beispiel wäre Fehlerbehandlung in C, bei dem ein goto in den "Aufräumblock" ein häufiges anzutreffendes Muster ist. Moderne Sprachen haben darauf reagiert und Alternativen eingebaut, für die Beispiele wären das etwa das "labeled break" in Java oder Exceptions. Du weißt das natürlich, aber die Behauptung goto hätte keinen Anwendungsfall stimmt dann nicht wirklich.

Goto ist übrigens auch nicht böse! Hat hier zwar keiner gesagt, aber ich denke es gibt ein sehr unsägliches Paper, das so etwas behauptet. Völliger Blödsinn!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

10.06.2016, 15:04

Möchte ich z.B. zwei ineinanderverschachtelte Schleifen vorzeitig beenden, könnte ich entweder ein Flag in beiden Schleifen testen, für n^2 zusätzliche Tests, oder einfach mit einem goto hinter die äußere Schleife springen.

Das ist nicht ganz richtig. Die Abbruchbedingung in der inneren Schleife ist schon vorhanden da die auch für goto benötigt wird. In der äußeren Schleife müsste zusätzlich eine Abfrage eingebaut werden was die Tests um n erhöht und nicht um n^2. Ob man diese Zeit wirklich benötigt ist auch nicht direkt gesagt. Es gibt ja viele Fälle in welchem man Geschwindigkeit für Übersicht eintauscht. Das hier ist meiner Meinung nach einer davon.
Natürlich ist Goto nicht böse. In den meisten Assemblerdialekten ist Goto die einzige Möglichkeit Sprünge, Funktionen und Co. abzubilden. Goto wird/wurde aber oft für Dinge eingesetzt die eigentlich schöner zu lösen sind. Deshalb gilt es mittlerweile als verrufen. In C++ braucht man kein Goto mehr Stroustrup selbst sagt in seinem Buch dass es hässlich ist und nicht verwendet werden sollte. Gut ob man das als Grund ansehen möchte etwas nicht zu tun muss jeder für sich selbst entscheiden. Ich denke einfach es ist für Anfänger gefährlich weil die sich damit dann schnell die Arbeit vereinfachen wollen und am Ende Code produzieren den keiner mehr verstehen will. Du wirst das genau so wissen wie ich/wir.
Ich denke wenn man mal mit einer Sprache in Kontakt kommt wo man goto wirklich benötigt dann wird man das schnell sehen. Normal guckt man sich Bücher und/oder Tutorials bzw. andere Codes an und dadurch sollte es ja auffallen. Ansonsten sollte man es vielleicht besser weglassen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

13

10.06.2016, 16:41


Möchte ich z.B. zwei ineinanderverschachtelte Schleifen vorzeitig beenden, könnte ich entweder ein Flag in beiden Schleifen testen, für n^2 zusätzliche Tests, oder einfach mit einem goto hinter die äußere Schleife springen. Ein goto ist in dem Fall die bessere Lösung. Ein anderes Beispiel wäre Fehlerbehandlung in C, bei dem ein goto in den "Aufräumblock" ein häufiges anzutreffendes Muster ist. Moderne Sprachen haben darauf reagiert und Alternativen eingebaut, für die Beispiele wären das etwa das "labeled break" in Java oder Exceptions. Du weißt das natürlich, aber die Behauptung goto hätte keinen Anwendungsfall stimmt dann nicht wirklich.

Aus diesem Grunde ward die Funktion erfunden.

14

10.06.2016, 21:10

Das mit den Schleifen kann ich schon nachvollziehen, aber für mich ist ein goto und zugehöriges Label einfach nur grauenhaft hässlich ^^.
Ansonsten, für solche Fehlerbehandlungen gibt es Exceptions, dazu ist goto nun wirklich C-Style.

Werbeanzeige