Kurs starten

**** GOTO ****

GOTO: Spruenge im Programm

GOTO springt zu einer Zeilennummer. Es ist der einfachste und zugleich meistkritisierte Befehl in BASIC.

Schreibweise

FormBedeutung
GOTO 100Setzt die Ausführung bei Zeile 100 fort.
IF A<10 THEN GOTO 20Springt nur, wenn die Bedingung zutrifft.
IF A<10 THEN 20Kurzform, das GOTO darf nach THEN entfallen.
ON X GOTO 100,200Springt je nach Wert von X zum ersten oder zweiten Ziel.

Eine Schleife von Hand

Mit GOTO und einer Bedingung baut man eine Wiederholung, ohne FOR zu benutzen. Das lohnt sich, wenn vorher nicht feststeht, wie oft sie laufen soll.

Zählen mit GOTO 10 X=1 20 PRINT X 30 X=X+1 40 IF X<4 THEN GOTO 20 1 2 3

Solange X kleiner als 4 ist, springt Zeile 40 zurück. Danach ist das Programm zu Ende.

Die Endlosschleife

Ein GOTO ohne Abbruchbedingung läuft ewig. Das ist der Klassiker aus jedem Handbuch und manchmal genau richtig, etwa bei einem Programm, das auf Tastendrücke wartet. Abbrechen lässt es sich hier im Browser mit der Esc-Taste, auf dem echten C64 war es die Taste RUN/STOP.

Der Klassiker 10 PRINT "HALLO WELT" 20 GOTO 10

Läuft, bis du abbrichst. Genau dieses Listing stand in unzähligen Zeitschriften.

Warum GOTO einen schlechten Ruf hat

Wer Sprünge quer durchs Programm streut, erzeugt schnell ein Gewirr, das niemand mehr nachvollziehen kann. Dafür gibt es den Begriff Spaghetticode. Der Informatiker Edsger Dijkstra kritisierte das schon 1968 scharf, und BASIC bekam einen guten Teil dieser Kritik ab. Mehr dazu steht in der Geschichte von BASIC.

Für kleine Programme ist GOTO trotzdem völlig in Ordnung. Sobald ein Abschnitt aber mehrfach gebraucht wird, ist GOSUB die bessere Wahl, denn es findet von selbst zurück.

Zeilennummern in Zehnerschritten

Deshalb nummerierte man früher in Zehnerschritten: Zwischen 10 und 20 passen später noch neun Zeilen, ohne dass ein einziges GOTO angepasst werden muss. Wird die Lücke zu eng, muss man umnummerieren und jeden Sprung mitziehen.

Typische Stolperfallen

Sprung ins Leere

Zeigt ein GOTO auf eine Zeile, die es nicht gibt, meldet BASIC ?UNDEF’D STATEMENT ERROR. Meist wurde die Zielzeile gelöscht oder vertippt.

Sprung in eine Schleife hinein

Mit GOTO mitten in eine FOR-Schleife zu springen, lässt den Zähler durcheinandergeraten. Springe immer auf die FOR-Zeile selbst oder ganz aus der Schleife heraus.

GOTO statt GOSUB

Wer mit GOTO in ein Unterprogramm springt, kommt nicht zurück. Dafür ist GOSUB da.

Passt dazu

Im Kurs lernst du GOTO in Lektion 12: GOTO: Sprünge. Die vollständige Referenz aller Befehle steht im Befehls-Lexikon.

HAEUFIGE FRAGEN

Fragen zu GOTO

Wie stoppe ich eine Endlosschleife?

Im Browser mit der Esc-Taste oder dem STOP-Knopf im Editor. Auf dem echten C64 war es die Taste RUN/STOP.

Ist GOTO schlechter Stil?

In grossen Programmen ja, weil der Ablauf unübersichtlich wird. In kurzen BASIC-Listings ist es das natürliche Mittel und war damals oft die einzige Möglichkeit.

Gleich selbst ausprobieren

Tippe die Beispiele in den freien Editor und sieh dir an, was passiert.

Freien Editor oeffnen →