LOOP

Aus C64-Wiki
Wechseln zu: Navigation, Suche
LOOP
Format: LOOP
Parameter
keine
Einordnung
Typ: Anweisung
Kontext: Strukturkontrolle
Aufgabe: Leitet eine Schleife ein
Abkürzung: keine
Verwandte Befehle
END LOOP - EXIT - REPEAT - UNTIL - FOR - NEXT


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort LOOP.

Typ: Anweisung
Syntax: LOOP

LOOP definiert den Anfang einer Schleife. Schleife, das ist ein Teil eines Programms, der unter Umständen mehrfach durchlaufen wird.

Die Konstruktion LOOP .. END LOOP stellt letztlich die "Mutter aller Schleifen" dar. Was hier im Schleifenkörper (das ist das, was LOOP und END LOOP einschließen) passiert, beschäftigt den Interpreter unentwegt. Nur mithilfe eines Befehls, der eine Abbruchbedingung überprüft, kann eine Schleife beendet werden. Der nötige und in Simons' Basic natürlich vorhandene (Ausstiegs-) Befehl lautet EXIT.

Mit diesen drei Befehlen (LOOP, END LOOP, EXIT) ist der Programmierer nun in der Lage, verschiedene Schleifentypen herzustellen:

  • Endlosschleifen (die kann man nicht verlassen: kein EXIT),
  • kopfgesteuerte Schleifen (die Ausstiegsbedingung wird gleich am Anfang abgefragt, so dass der Körper unter Umständen gar nicht erst durchlaufen wird),
  • fußgesteuerte Schleifen (da wird erst am Ende des Schleifenkörpers die Ausstiegsbedingung geprüft, so dass er mindestens einmal durchlaufen wird) und
  • Zählschleifen (die werden verlassen, wenn ein Zählwert über- oder unterschritten ist).

Für die letzten beiden Schleifentypen gibt es eigene Befehlsfolgen (REPEAT-UNTIL für fußgesteuerte und FOR-NEXT für Zählschleifen), weshalb hier nur der Typ der kopfgesteuerten Schleifen betrachtet wird.

In anderen Hochsprachen (z.B. in Java und C) gibt es für diesen Typ das Befehlswort WHILE, in der Bedeutung "solange die Bedingung hinter WHILE zutrifft, durchlaufe die Schleife". Der Ausstiegsbefehl ist dabei sozusagen gleich mit im WHILE eingebaut. WHILE stellt SB nicht zur Verfügung, es muss mit LOOP nachgebildet werden. Hier bei LOOP fragt der Interpreter leider anders, nämlich "solange die Bedingung hinter EXIT nicht zutrifft, durchlaufe die Schleife", also logisch genau anders herum.

Die folgende Schleife (in Pseudocode):

A = 0
WHILE A<10 DO
  PRINT A;
  A = A+1
WEND

müsste in Simons' Basic so aussehen (mit NOT wird hier dem "anders herum" Rechnung getragen):

10 A = 0
20 LOOP
30   EXIT IF NOT(A<10)
40   PRINT A;
50   A = A+1
60 END LOOP

Ergebnis (bei beiden Programmen): 0 1 2 3 4 5 6 7 8 9. Wer sich nicht an negativ formulierte logische Terme (NOT) gewöhnen kann, müsste schreiben:

10 A = 0
20 LOOP
30   EXIT IF A>9
40   PRINT A;
50   A = A+1
60 END LOOP

Also mit einer Abbruchbedingung, die wirklich genau anders herum formuliert ist und nebenbei auch verständlicher und klarer ist.

Beispiel[Bearbeiten]

Beispiel für eine kopfgesteuerte Schleife:

10 A$ = ""
20 LOOP
30   EXIT IF PLACE(A$,"jnJN")
40   PRINT "Ja (j) oder Nein (n)? ";
50   FETCH "{crsr right}", 1, A$
60 END LOOP

Man kann alle Buchstaben eingeben, aber die Schleife wird erst verlassen, wenn "j" oder "n" getippt wurde (auch groß geschrieben). Wenn A$ bereits einen der Tastendrücke enthielte, würde die Abfrage gar nicht erst stattfinden (z.B. das Beispiel mit A$="j" in Zeile 10 probieren).