Sehr schlechte und sehr gute !
Die meisten Coder denken sie wären superschlau, und machen es anderen nach und ächten deswegen goto. Es gibt aber einige, die wirklich gut sind, und für die ist das nur ein weiteres Tool, das für bestimmte Fälle sehr wohl seine Daseinsberechtigung hat. Jeder der mir da widerspricht, ist wohl eben nicht so gut wie er/sie denkt.
:-)
Das stimmt allerdings. Die Anzahl der sinnvollen Szenarien ist zwar stark beschränkt, aber im Prinzip ist eine Funktion ja auch nichts anderes als ein abstraktes "goto".
c3rl schrieb:
--------------------------------------------------------------------------------
> Das stimmt allerdings. Die Anzahl der sinnvollen Szenarien ist zwar stark
> beschränkt, aber im Prinzip ist eine Funktion ja auch nichts anderes als
> ein abstraktes "goto".
Ich denke nicht - eine Funktion hat eine Rücksprungadresse und einen Rückgabewert, beides haben GOTO-Konstrukte nicht.
Und mir fällt kein Fall ein, in dem GOTO guter Code wäre. "Dann bin ich halt nicht so gut" aber das Gegenteil müsst ihr mir erst beweisen.
Naja auf eine Teilmenge der Funktionen schon.. muss ja keinen Rückgabewert haben..und den Rücksprung könnte man ja durch ein weiteres Goto... *graus*
Ich benutze Goto auch ab und an, aber nur für "On Error Goto Errorhandler" Dinge, wenns kein Try/Catch gibt..
na dann nenn doch mal ein Beispiel welches sich nicht anders oder nur hässlicher ohne Goto lösen lässt...
Das Problem ist ja nicht das goto an sich, sondern die potenziell gruselige Wartbarkeit des Codes bei Verwendung des Befehls.
objection! Es gibt einige Fälle, in denen tatsächlich ein goto Sinn macht. Etwa um in paar Sprachen das Fehlen von bestimmten Konstrukten zu kompensieren (z.B. Exceptions in C) oder für Inlineoptimierungen. Ist keines von beiden Kriterien erfüllt, so tut man gut daran, gotos zu meiden wie der Teufel das Weihwasser :)
Allerdings bin ich persönlich bei weitem kein so guter Programmierer, dass ich von so etwas Gebrauch machen würde -- ich fürchte außerdem, die Lehren von Wirth und Dijkstra sind bei mir auf fruchtbaren Boden getroffen ;)
Es gab dazu btw. eine interessante Diskussion rund um gotos im Linux-Kernel. Auch wenn ich den Argumenten nicht ganz zustimmen kann, halte ich es dennoch für wichtig, gotos nicht per se zu verdammen (wie ich es früher gemacht habe):
http://kerneltrap.org/node/553/2131
Ich finde goto vor allem nützlich wenn man mit Locks arbeitet und mehrere exit stellen im Code hat weil unterschiedliche Fehler auftreten können. An den Stellen kommt dann ein goto release hin und bei dem Label wird der ganze Lock release Kram gemacht.
Knutchen schrieb:
--------------------------------------------------------------------------------
> Ich finde goto vor allem nützlich wenn man mit Locks arbeitet und mehrere
> exit stellen im Code hat weil unterschiedliche Fehler auftreten können. An
> den Stellen kommt dann ein goto release hin und bei dem Label wird der
> ganze Lock release Kram gemacht.
jo, wenn die Sprache kein finally anbietet, ist das genau der richtige Weg das zu tun ;)
das zeigt, dass du üerhaupt keine Ahnung hast.
das eine ist auf unterester Ebene ein jmp, das andere ein call
try-with-resources!
--
Bitte prüfen Sie, ob Sie diesen Beitrag wirklich ausdrucken müssen!
es gab bei mir noch nie eine Situation wo mir goto den Arsch gerettet hat.
Wobei um deinem Beispiel zu folgen. Bei guten Programmierern ist die Sprache und der Code nicht das Problem, sondern die Logik das Problem zu lösen.
Die Sprache ist Mittel zum Zweck das Ziel zu erreichen.
Ich würde mal behaupten, du bis keiner der guter Programmierer.
1 mal bearbeitet, zuletzt am 19.01.12 21:05 durch Wolf als Gast.
Der einzige sinnvolle Einsatz, der mir einfällt ist "GoTo ErrorHandler".
Aber der ist auch nur Sinnvoll, wenn die Sprache kein "Try Catch Finally" kennt.
Wann ist es denn noch Sinnvoll?
enolive schrieb:
--------------------------------------------------------------------------------
> ich fürchte außerdem, die Lehren von Wirth und Dijkstra sind bei mir auf fruchtbaren Boden getroffen ;)
Wirth und Dijkstra?
Na ja, was sind dagegen schon ein McConnell, Torvalds oder Knuth ("Structured Programming with go to Statements")?
;-)
Schade, wirst du nicht eines Besseren belehrt werden...
vllt um verschachtelte schleifen anschaulich abzubrechen
break $n;
--
Bitte prüfen Sie, ob Sie diesen Beitrag wirklich ausdrucken müssen!
stimmt schon, aber verschachtelungen abzählen, $n irgendwann anpassen... labels find ich manchmal hübsch
blubbsi schrieb:
--------------------------------------------------------------------------------
> stimmt schon, aber verschachtelungen abzählen, $n irgendwann anpassen...
> labels find ich manchmal hübsch
Mir scheint da in den meisten Fällen eher ein return angebracht zu sein.
--
Bitte prüfen Sie, ob Sie diesen Beitrag wirklich ausdrucken müssen!
ja, das sieht insgesamt dann wirklich besser aus, stell ich mir vor
ich glaube, ich habe so eine fan-in daumenregel falsch vertanden, nach der ich selten eine funktion mache, die nur an einer stelle aufgerufen wird. nur wenn es ein code gerüst ist. in dem genannten fall return zu verwenden setzt vorraus, dass man mit dem mehr an funktionen klar kommt.
Goto hin oder her ; was hat man davon einen Insel-Menschen seinen Code schreiben zu lassen der dann nur dazu führt das den kein anderer versteht.
Genau solche furchtbaren Konstrukte und pseudo "Leet" Style sorgen ja nur dafür das Code viel aufwendig zu warten ist als in einmal runter zuschreiben.
Wenn deine Sprache ein "Goto" erfordert, wäre vielleicht ganz angebracht die Sprache zu wechseln ; den in dem Fall ist die gewählte Sprache einfach unzureichend ausgestattet.
Man kann auch in diversen Sprachen Klassenstrukturen nachbauen ; aber warum sollte man das tun ? Man benutzt einfach eine Sprache die das von vorn herein bietet.
Gibt ja auch nicht umsonst Coding-Styles an die man sich halten sollte ; schlicht damit der Code allgemein verstanden wird und nicht eine "Besonderheit" darstellt.
Wenn man Goto dennoch aus irgendwelchen ominösen Gründen benutzt, dann extrem reduziert und über die Massen gut dokumentiert was genau passieren soll.
Kommentare: 171 | letzter Beitrag 20:42 Uhr
Kommentare: 94 | letzter Beitrag 26.05. 19:45
Kommentare: 77 | letzter Beitrag 20:57 Uhr
Kommentare: 70 | letzter Beitrag 18:56 Uhr
Kommentare: 62 | letzter Beitrag 21:44 Uhr
E-Mail an news@golem.de

Laut Apple-Zulieferern wird das iPhone 5 mit einem neuartigen In-Cell-Touchscreen ausgerüstet. Als Hersteller soll Sony infrage kommen. Bislang hieß es, dass Apple Sharp und Toshiba bevorzugen würde.
Das Unternehmen Owncloud entwickele nur Software und biete Support für Kunden, sagte Technikchef Frank Karlitschek auf dem Linuxtag 2012. Darüber hinaus verriet er einige technische Details zu Owncloud 4 und kommenden Entwicklungen.

Das Landgericht Hamburg hat entschieden, dass der Blogger und Rechtsanwalt Markus Kompa für ein via Youtube eingebettetes ZDF-Video als Verbreiter haftet. Geklagt hat ein umstrittener Arzt aus München, der zuvor erfolgreich gegen den Bericht der ZDF-Sendung Wiso vorgegangen war.

Renesas ist nach Elpida der zweite schwer angeschlagene japanische Chiphersteller. Renesas, das Hitachi, Mitsubishi Electric und NEC gehört, macht Verlust und will seine größte Fabrik verkaufen.

RIM soll in den kommenden Tagen erneut einen massiven Stellenabbau ankündigen. "Ich habe herausgefunden, welche Teile ich in meinem Puzzle nicht mehr benötige", sagte Firmenchef Thorsten Heins.

Ein britisches Blog will erfahren haben, dass Facebook den norwegischen Browserhersteller Opera Software kaufen will. Beide Unternehmen wollen sich dazu nicht äußern.