BEGIN

Aus C64-Wiki
Zur Navigation springenZur Suche springen
BEGIN
Syntax: IF ... THEN BEGIN <Anweisungen> BEND
oder
IF ... THEN ... ELSE BEGIN <Anweisungen> BEND
Parameter
<Anweisungen>: Liste von Anweisungen, auch über Zeilengrenzen hinweg.
Einordnung
Typ: Anweisung
Kontext: Programmstruktur
Aufgabe: Einleitung eines Anweisungsblocks für einen THEN- oder ELSE-Zweig
Abkürzung: bE
Token: $fe $18 (254 24)
Verwandte Befehle
BEND, ELSE, IF, THEN

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl BEGIN ab Commodore BASIC V7.0 oder höher.


Die Anweisung BEGIN leitet in einer IF-THEN-ELSE-Konstruktion unmittelbar nach einem THEN- oder ELSE-Schlüsselwort einen Anweisungsblock ein, der sich auch über mehrere Zeilen erstrecken kann. Ein solcher Block muss dann mit einer passenden BEND-Anweisung (sozusagen als schließende Klammer) enden. Fehlt diese, bricht das Programm mit der Fehlermeldung ?BEND NOT FOUND ERROR ab. Im umgekehrten Fall, mit einem BEND, das kein zugehöriges BEGIN hat, endet ein Zweig eventuell "vorzeitig" und das überflüssige BEND wird ignoriert.
Wird im Programmablauf ein BEGIN nicht unmittelbar hinter einem THEN oder ELSE angetroffen kommt es zum Fehler ?SYNTAX ERROR.

Ein BEGIN-BEND-Block kann auch leer sein, entfaltet aber seinen sinnvollen Einsatz erst, wenn sich Anweisungen über mehrere Zeilen ausdehnen. Dabei endet ein THEN- oder ELSE-Zweig nicht zwangsläufig mit der BEND-Anweisung, sondern in der gleichen Zeile folgende Befehle gehören noch zum jeweiligen Zweig.
Die Überwindung der Zeilenlimitierung erlaubt so uneingeschränkte IF-THEN-ELSE-Strukturen, die sich über das gesamte Programm erstrecken können und außerdem auch verschachtelt sein können, d.h. innerhalb eines BEGIN-BEND-Blocks kann wiederum eine IF-THEN-ELSE-Konstruktion mit BEGIN-BEND-Blöcken enthalten sein. Eine Limitierung der Verschachtelungen ist nur durch den verfügbaren Platz für das Programm gegeben.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Eine klassische IF-THEN-ELSE-Konstruktion mit mehrzeiligen THEN- und ELSE-Zweigen, die über das BEND hinaus gehen:

100 IF B=0 THEN BEGIN REM IM THEN-ZWEIG
110 :PRINT "THEN-ZWEIG"
120 :BEND : PRINT "NOCH IM THEN-ZWEIG"
130 ELSE BEGIN REM IM ELSE-ZWEIG
140 :PRINT "ELSE-ZWEIG"
150 :BEND : PRINT "NOCH IM ELSE-ZWEIG"

Einrückungen mit ":" am Zeilenanfang dienen nur der Veranschaulichung der Struktur.

100 ELSE BEGIN
110 DAS HIER IST ALLES KOMMENTAR
120 UND WIRD IGNORIERT, EGAL
130 WENN DIE SYNTAX NICHT STIMMT.
140 BEND

Ein isolierter ELSE-Zweig (wird nie ausgeführt) kann für einen mehrzeiligen Kommentar "missbraucht" werden. Schlüsselwörter wie DATA entfalten hier allerdings dennoch ihre Wirkung, wenn es zum entsprechenden READ kommt.

100 IF F=1 THEN BEGIN
120 :PRINT "FALL 1"
130 BEND: ELSE BEGIN
140 IF F=2 THEN BEGIN
150 :PRINT "FALL 2"
...
900 BEND: ELSE BEGIN
910 :PRINT "KEIN FALL DAVOR"
920 BEND: ... BEND

Eine Fallunterscheidungskette: In jedem ELSE-Zweig wird ein weiterer Fall in Variable F abgefragt. Ab Zeilennummer 900 kommt der Standardfall zum Zug, falls keine Fallabfrage zuvor zutraf.
In Zeile 920 muss die Anzahl der BENDs entsprechend der Anzahl der "ELSE BEGIN"-Zeilen angepasst werden.