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 u.U. mehrfach durchlaufen wird.

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 (Aussteiger-) Befehl lautet EXIT.

Mit diesen drei Befehlen (LOOP, END LOOP, EXIT) ist der Programmierer nun in der Lage, sowohl Endlosschleifen (die kann man nicht verlassen: kein EXIT) als auch kopfgesteuerte Schleifen (die Ausstiegsbedingung wird gleich am Anfang abgefragt, so dass der Körper u.U. 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) herzustellen. Für die letzten beiden Schleifentypen gibt es eigene Befehle (REPEAT .. UNTIL (Fuß) und FOR .. NEXT (Zähl)), daher interessiert uns hier nur der zweite Typ (Kopf).

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 wirklich genau anders herum. Geht auch. Mir persönlich fällt die erste Ausdrucksweise leichter.

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 man kommt nur aus der Schleife heraus, wenn
"j" oder "n" getippt wurde (auch groß). Wenn a$ bereits einen der Tastendrücke enthielte,
würde die Abfrage gar nicht erst stattfinden (testet einmal a$="j" in Zeile 10).)