Frage deutsch
~~~~~~~~~~~~~~
Welche Nachteile hat der GOTO-Befehl?
 

Question English
~~~~~~~~~~~~~~
Why should I avoid the GOTO statement?
 

Antwort 1
~~~~~~~~~~
[ von Thomas Antoni, 19.5.2002 - 19.1.2006 ]
.
Wer GOTO verwendet, legt den Keim zur "Spagetti-Programmierung" und zu schlecht strukturierten Programmen, bei denen der Durchblick und die Fehlersuche schwer fällt. Bei nachträglichen Änderungen weiß man nie genau, von welchen Stellen überall zu der gerade editierten Stelle hingesprungen wird, und schwer zu findende Folgefehler sind eher die Regel als die Ausnahme.
 
Wenn man sich bemüht, das GOTO weitestgehend zu vermeiden, entstehen automatisch wohlstrukturierte und gut wartbare Programme, und auch Du selbst blickst wesentlich besser durch Dein Programm durch, wenn Du es nach längerer Zeit mal erweitern oder Fehler darin beseitigen willst. Sihe auch unter ->
Strukturierte Programmierung im Lexikon.
 
Häufig werden GOTOs zum vorzeitigen Verlassen von SUBs und Kontrollstrukturen verwendet. Hierfür bietet QBasic jedoch zum Glück die folgenden speziellen Befehle, die in meinem QB-Kochbuch im Detail beschrieben sind (Download des Kochbuchs auf
http://www.qbasic.de in der Tutorial-Rubrik):
EXIT SUB
EXIT FUNCTION
EXIT IF
EXIT FOR
EXIT DO
 
Es gibt immer einen Weg, ein GOTO zu vermeiden, auch wenn Du es nicht glaubst. Wer mir das Gegenteil beweist erhält von mir eine Kiste Sekt :) Die einzigen Ausnahmen, die ich für die Verwendung des GOTO-Befehls gelten lassen würde sind:
Das vorzeitige Verlassen einer CASE SELECT Struktur (leider gibt es nur bei PowerBasic ein EXIT SELECT)
Anspringen einer Interruptbearbeitung mit ON .. GOTO
 
Ich hasse den GOTO-Befehl! Ich finde ihn ekelhaft! Allein schon, dass man nie wissen kann, von wo überall per GOTO zu einer Sprungmarke hingesprungen wird und welche Seiteneffekte eine Programmänderung der Befehle nach der Sprungmarke haben kann, macht ihn mir widerwärtig. Ich habe direkt eine fast krankhafte Phobie vor dem GOTO-Befehl.
 
Viel besser sind doch strukturierte Programmblöcke, die genau einen Eingang und einen Ausgang haben.
 
Es gibt dazu übrigens einen berühmten Artikel mit dem Titel "Goto Statement Considered Harmful" von Edsger W. Dijkstra, dem Guru der "Strukturierten Programmierung", Diesen Artikel kann man nachlesen unter
www.acm.org/classics/oct95/ .
 
 
*** Hinweis von RockTheShock zu ON ... GOTO
Thomas: Du schreibst "bei den Interrupt-gesteuerten Dingen, wie ON ERROR/KEY/TIMER GOTO"
 
Meines Wissens ist die ON ... Anweisung aber nicht interruptgesteuert. es wird stattdessen hinter jeder Anweisung eine IF-Anweisung vom Compiler eingefügt.
 
Das müsste der Grund sein, warum Programme, die mit ON ERROR arbeiten, sich immer stärker aufblähen.
 
Diese Information fand ich in ETHAN WINER'S "PC Magazine's BASIC Techniques and Utilities Book" welches Du in der Tutorial-Rubrik von
www.qbasic.de zum Download anbietet. Das kann man also dort nachlesen und auch wie man das herausfindet auch. Ich denke, dies es ist das beste QB-Buch für Fortgeschrittene das es gibt.
 
 

Antwort 2
~~~~~~~~~
Man soll den GOTO-Befehl nicht verwenden, weil der dadurch entstehende Code bei mehreren dutzend oder gar hundert GOTOs ganz schnell unübersichtlich wird. Durch den übermääßigen Gebrauch des GOTO-Befehls entsteht und ein völlig unstrukturierter "Spagetticode" , den niemend mehr verstehen und warten kann - auch nicht der Autor selbst nach einiger Zeit.
 
. Und die logische Strukturierung ist beim Programmieren das Wichtigste. Der Compiler erzeugt am Ende noch genug verworrenen Code (IF...THEN...ELSE...END IF!)! Da muss man als Programmierer auf keinen Fall seinen Senf dazugeben. Außerdem wird durch das viele Springen das Programm viel langsamer (vorallem, wenn es interpretiert wird!). Und die Zeiten, als es in BASIC noch Zeilennummern bedurfte und es keine SUBs gab, sind zum Glück längst vorbei! GOTO lässt sich immer, außer bei den Interrupt-gesteuerten Dingen, wie ON ERROR/KEY/TIMER GOTO, vermeiden.
 

Antwort 3
~~~~~~~~~
[ von Helium (
m.beckah*gmx.de ) im QB-Forum, 8.6.2002 ]
.
GOTO oder nicht GOTO?
 
*** Wann sollte ich GOTO verwenden?
Wenn ich verschachtelte Schleifen verlassen will. Das in QB vorhandene EXIT verlässt nähmlich nur die Aktuelle Schleife. Wenn ich nun aber
aus einer übergeordneten Schleife springen möchte, muss ich GOTO verwenden.
 
*** Wann sollte ich GOTO nicht verwenden?
In allen anderen Fällen. Jedes andere GOTO lässt sich entweder durch eine Schleife (DO...LOOP, ...) oder eine Funktion, bzw. Sub ersetzen.
Man sollte sein Programm aber von vornherein so konstruieren, dass keine GOTOs verwendet werden, da man sonst probleme mit der Lokalität
von Variablen hat.
 
Answer 4
~~~~~~~~~
[ Tip by Buff ]
.
Keep GOTO statements to a minimum. Some say never use them. My personal opinion is if they are only used within a small routine and kept to a minimum it is ok. Don't use them to call one sub routine from another. It makes debugging difficult, and almost always results in what is commonly called "spaghetti code". This is versus "structured" programming that uses subroutines (either gosub/return or QB subs/functions) to do tasks that are performed over and over.


Answer 5
~~~~~~~~~
[ aus der Newsgroup
news:comp.lang.basic.misc , 14.6.2002 ]
.
What is so BAD about GOTO?
.
ANSWER
.
Nothing. However, people who use GOTO often have some screws
loose and use it to make the most hideous looking spaghetti code.
therefore, it is common practise to frown upon the use of GOTO.
GOTO is an acceptable construct of the BASIC language, and when used
properly, it poses no problems. It does not magically make code
unreadable, unmaintainable, or unprofessional contrary to popular
belief.
 

[ The QBasic-MonsterFAQ --- Start Page: www.antonis.de/faq ]