ELSE (BASIC 3.5)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
ELSE (BASIC 3.5)
Syntax: IF <Bedingung> THEN <Anweisungen_oder_Zeilennummer>:ELSE <Alternative_Anweisungen_oder_Zeilennummer>
oder
IF <Bedingung> GOTO <Zeilennummer>:ELSE <Alternative_Anweisungen_oder_Zeilennummer>
Parameter
<Bedingung>: beliebiger Ausdruck, dessen Ergebnis als logisch falsch bzw. logisch wahr interpretiert werden kann
Einordnung
Typ: Schlüsselwort
Kontext: Programmstruktur
Aufgabe: Kennzeichnung eines alternativen Zweigs einer IF-THEN- bzw. IF-GOTO-Konstruktion
Abkürzung: eL
Token: $d5 (213)
Verwandte Befehle
IF, THEN

Anmerkung: Dieser Artikel beschreibt das BASIC-Schlüsselwort ELSE ab Commodore BASIC V3.5 oder höher.


Das Schlüsselwort ELSE (engl., andernfalls, sonst) kennzeichnet einen alternativen Zweig einer IF-THEN- bzw. IF-GOTO-Konstruktion. Ist das Ergebnis der IF-Ausdrucks <Bedingung> logisch falsch (also 0), sucht der BASIC-Interpreter nach einem ELSE-Token. Dieses muss sich in der selben Zeile hinter dem THEN bzw. GOTO befinden und vom Block <Anweisungen_oder_Zeilennummer> durch mindestens einen Doppelpunkt getrennt sein (abgesehen von dazwischen liegenden Leerzeichen). Ein ELSE unmittelbar hinter THEN bzw. ohne vorangehenden Doppelpunkt wird mit allem bis zum Zeilenende ignoriert.
Wird ein ELSE gefunden, wird die Ausführung hinter diesem bei <Alternative_Anweisungen_oder_Zeilennummer> fortgesetzt bzw. zur entsprechenden Zeile der gegebenen Zeilennummer gesprungen, ansonsten schreitet die Ausführung in der nächsten Programmzeile fort.
Etwaige weitere in der selben Zeile folgenden ELSE-Klauseln werden ignoriert.

Die Schachtelung von IF-THEN-ELSE-Anweisungen ist somit unter BASIC 3.5 nicht möglich (nur als Kaskadierung), jedoch unter BASIC 7.0 unter Zuhilfenahme eines BEGIN-BEND-Blocks realisierbar. Eine Verschachtelung folgt also nicht dem üblichen Verhalten anderer Programmiersprachen, da der ELSE-Zweig gemeinschaftliche für alle vorherstehenden IF-THEN-Vorkommnisse durchlaufen wird:
10 IF A=1 THEN PRINT "A=1": IF B=1 THEN PRINT "A UND B = 1" ELSE PRINT "A NICHT 1 ODER B NICHT 1"
Jedes der beiden IFs nimmt den ELSE-Zweig, falls die Bedingung nicht erfüllt wird. Logisch gesehen entspricht das dann
10 IF A=1 AND B=1 THEN PRINT "A UND B = 1" ELSE "A NICHT 1 ODER B NICHT 1"
Erst damit kann der ELSE-Zweig dem entsprechenden IF zugeordnet werden (hier dem inneren):
10 IF A=1 THEN PRINT "A=1": BEGIN IF B=1 THEN PRINT "A UND B = 1" ELSE PRINT "B NICHT 1": BEND
(oder zum äußeren)
10 IF A=1 THEN BEGIN PRINT "A=1": IF B=1 THEN PRINT "A UND B = 1": ELSE: BEND: ELSE PRINT "B NICHT 1"
Aber selbst mit Klammerung muss man im äußeren' Fall vorsichtig sein: Auch hier muss das innere IF ein ELSE haben, sonst würde das innere IF B=1 ausbrechen, dabei das BEND ignorierend zum äußeren ELSE gehen und diesen Zweig, der zum IF A=1 gehört, durchlaufen! Der leere innere ELSE-Zweig fängt dies aber hier ab.

Das Token ELSE darf auch ohne vorangehendes IF-THEN/GOTO verwendet werden (überall dort, wo Anweisungen erlaubt sind). Die dahinter folgenden Anweisungen werden dann aber nie ausgeführt (Verhalten annähernd wie bei REM).

Im Zuge einer Renummerierung des Programmtextes mittels RENUMBER werden auch Vorkommnisse der Art ELSE <Zeilennummer> berücksichtigt.

Beispiele[Bearbeiten | Quelltext bearbeiten]

10 INPUT "DIVIDEND, DIVISOR";D1,D2
20 IF D2 THEN PRINT "QUOTIENT:";D1/D2:ELSE PRINT "0 IST ALS DIVISOR NICHT ERLAUBT!"

Dieses Beispiel fragt nach Dividend und Divisor und gibt den Quotienten aus. Eine Division durch 0 wird durch das IF-THEN-ELSE-Konstrukt verhindert.

IF A=B THEN PRINT "A=B":ELSE IF A=C THEN PRINT "A=C":ELSE PRINT "A<>B UND A<>C"

Kaskadierung: Falls A gleich B ist, wird A=B ausgegeben, ansonsten wird geprüft, ob A gleich C ist. Wenn ja, dann wird A=C ausgegeben, ansonsten A<>B UND A<>C.

Spezielles

30 ELSE PRINT "WIRD IGNORIERT"

Die Anweisung hinter dem ELSE wird ignoriert.

100 IF A <= 100 GOTO 500 : ELSE PRINT "LIMIT UEBERSCHRITTEN!"

ist identisch mit ...

100 IF A <= 100 THEN 500 : ELSE PRINT "LIMIT UEBERSCHRITTEN!"

und gleichwertig bei getauschten Zweigen und negiertem Bedingungsausdruck ...

100 IF A > 100 THEN PRINT "LIMIT UEBERSCHRITTEN!" : ELSE 500

... wo Zeilensprünge in gewohnter Weise auch in einer IF-THEN/GOTO-ELSE-Konstruktion möglich sind.