Blitz2D: Variablen und Namen

Aus Wikibooks

Navigation: BlitzBasic >>> Blitz2D >>> Funktionen >>> Grundwissen

Variablen und Datentypen[Bearbeiten]

Variablen sind Buchstaben oder Worte, denen ein bestimmter Wert zugewiesen werden kann. Das kann man sich am besten als eine Schachtel vorstellen, der man einen Namen gibt und einen Inhalt hinzufügt. Solche Schachteln sind je nach Material jedoch nicht für jeden Inhalt geeignet, so sind Schachteln aus Plastikfolie gut für Flüssigkeiten wie Wasser geeignet, jedoch nicht so gut für feste Gegenstände, die scharfe Kanten haben können wie Messer. Umgekehrt wäre eine Schachtel aus einem Drahtgeflecht gut für Messer, aber schlecht für Wasser. Man muss also zusätzlich zum Namen einer Schachtel auch festlegen, wofür sie geeignet ist. Ebenso ist es auch bei Variablen, denen man zum Namen einen Datentyp gibt, der festlegt, welche Art von Daten in einer Variablen gespeichert werden können. In anderen Sprachen gibt es sehr viele solcher Datentypen, um für jeden möglichen Inhalt einen passenden Datentyp zu bieten. In BlitzBasic werden nur vier grundsätzliche Datentypen unterschieden, die man später für spezielle Bereiche anpassen kann. Für den Anfang reichen jedoch drei dieser Grundtypen, da der vierte mehr Wissen über BlitzBasic erfordert. Um einer Variablen einen Datentyp zuzuordnen, wird bei der ersten Verwendung der Variablen ein Datentyp-Zeichen direkt hinter den Namen gesetzt. Dadurch wird der Name untrennbar mit dem Datentyp verbunden und man kann bei weiteren Verwendungen des Variablennamens den Datentyp weglassen. Um einen Überblick zu behalten, wann eine Variable zuerst verwendet wurde, ist es daher sinnvoll, Variablen am Anfang eines Programms zu bestimmen, zweckmäßig wäre auch eine alphabetische Reihenfolge. So hat man immer einen Platz, wo man bisher verwendete Variablen findet, was wichtig in Programmen mit vielen Variablen ist, denn so kann man schnell feststellen, ob ein Name für eine neue Variable schon für eine andere Variable verwendet wird.

Hier also zunächst einmal die ersten 3 Variablentypen:

  • Ganzzahlen (Integer) Kennzeichen: % belegen 4 Bytes Speicher, hier können Zahlen von -2147483648 bis 2147483647 gespeichert werden. (Wenn kein Datentyp angegeben wird, wird immer Integer verwendet)
  • Kommazahlen (Float) Kennzeichen: # belegen 4 Bytes Speicher, hier können Kommazahlen bis ca. ±10^38 (2^±128) mit bis zu 6 Ziffern gespeichert werden.
  • Zeichenketten (string) Kennzeichen: $ belegen 4 Bytes plus die Zeichenkette, hier können beliebig lange Zeichenketten gespeichert werden. Im Gegensatz zu anderen Programmiersprachen, in denen ein Nullbyte als Ende der Zeichenkette angesehen wird, können bei Blitzbasic auch Nullbytes in der Zeichenkette stehen, da die Länge der Zeichenkette in den einleitenden 4 Bytes steht. Als Extremfall ist es sogar möglich, ganze Dateien von mehreren Megabyte Größe in einer Zeichenkette zu speichern.

Namen und Keywords[Bearbeiten]

Namen müssen immer mit einem Buchstaben beginnen, danach können weitere Buchstaben, Ziffern, oder ein Tiefstrich(_) in beliebiger Reihenfolge und Anzahl folgen. Die Länge von Namen unterliegt soweit mir bekannt ist keiner Begrenzung. Ich habe das mit zwei Variablen getestet, die sich erst nach dem tausendsten Zeichen unterscheiden und es wurden immer noch zwei verschiedene Variablen erkannt. (aber wer will schon jedes mal so viele Zeichen eingeben) Es gibt einige Namen, die man nicht für Variablen oder Funktionen verwenden darf, weil sie von BlitzBasic reserviert sind. Solche Namen werden als Keywords bezeichnet. Eine Liste der Keywords befindet im Anhang der Buchreihe.

Gültigkeit[Bearbeiten]

Bei "Variablen und Datentypen" stand, dass bei der Definition einer Variablen ein Name untrennbar mit einem Datentyp verbunden wird. Das stimmt jedoch nicht ganz, denn Namen von Variablen sind nicht immer im ganzen Programm gültig. Es gibt die Möglichkeit, Variablen nur für bestimmte Programmbereiche zu definieren. Eine solche Definition erfolgt durch das Keyword Local und kann sowohl im Hauptprogramm, als auch in Funktionen erfolgen. In Funktionen kann man auf lokale Variablen des Hauptprogramms nicht zugreifen und in Funktionen definierte lokale Variablen werden beim Beenden der Funktion gelöscht. Variablen, die jedoch als Global definiert werden, sind im ganzen Programm gültig, jedoch kann man nicht uneingeschränkt auf sie zugreifen, da lokale Variablen eine höhere Priorität haben. Wenn man beispielsweise im Hauptprogramm eine globale Variable definiert und in einer Funktion eine lokale Variable mit dem gleichen Namen definiert, wird bei Verwendung des Namens in der Funktion nur auf die lokale Variable zugegriffen und ein Zugriff innerhalb der Funktion auf die globale Variable mit dem gleichen Namen ist nicht mehr möglich. Namen von Funktionen und Konstanten sind jedoch immer global und können nicht als lokal definiert werden.

Konstanten[Bearbeiten]

Konstanten sind immer global. Sie werden mit dem Keyword Const definiert und müssen bei der Definition sofort einen Namen, einen Datentyp und einen Wert bekommen und können danach nicht mehr geändert werden. Der Wert, der einer Konstanten zugewiesen wird, kann aber auch berechnet werden, jedoch dürfen zur Berechnung nur Zahlen (oder Zeichenketten bei Zeichenkettenkonstanten), oder vorher definierte Konstanten verwendet werden, jedoch keine Variablen oder Funktionsaufrufe. Mit einem Const können durch Kommas getrennt mehrere Konstanten definiert werden.

Funktionen[Bearbeiten]

Die Definition einer Funktion wird mit dem Keyword Function eingeleitet. Danach folgt (nach einem Leerzeichen) der Funktionsname und (ohne Leerzeichen) ein Datentyp, der angibt welche Werte die Funktion zurück geben kann. Auch hier gilt, wenn kein Datentyp angegeben wird, wird Integer als Rückgabetyp bestimmt. Nach dem Datentyp kann der Funktion eine Liste von Variablen in runden Klammern übergeben werden, die als Parameter bezeichnet werden. Es müssen jedoch keine Parameter festgelegt werden, aber die Klammern müssen auf jeden Fall eingegeben werden. (Die Parameter sind in der Funktionsdefinition lokale Variablen) Eine Funktionsdefinition wird mit dem Keyword End Function beendet. Alle Programmanweisungen, die zwischen "Function" und "End Function" stehen bilden ein Unterprogramm, dass mit dem Funktionsnamen aufgerufen wird. Dieses Unterprogramm wird mit Erreichen von "End Function" beendet, kann jedoch vorher durch das Keyword Return, mit einem Rückgabewert beendet werden. Da "End Function" immer den Defaultwert (Vorgabewert) des Rückgabetyps zurück gibt, steht "Return" meistens direkt vor "End Function". Das muss jedoch nicht immer so sein, wenn beispielsweise eine Integer-Funktion Parameter prüft und bei Erfolg True (Wahr) zurück gibt, wird durch "End Function" der Defaultwert 0 zurück gegeben, was von Blitzbasic als False (Falsch) interpretiert wird.

Beispiel[Bearbeiten]

;Die Funktion prüft, ob das erste Zeichen der übergebenen Zeichenkette
;eine Ziffer ist. Ziffern haben einen ascii-Wert von 48-57 
Function IstZiffer%(Zeichen$)
  Local A% ;Die Variable A vom Typ Integer ist nur in der Funktion gültig 
  A=Asc(Zeichen) ;Asc übergibt den ascii-Wert des ersten Zeichens an A
  If A>47 Then
    IF A<58 Then Return True ;Wenn das Zeichen eine Ziffer ist, wird die Funktion hier beendet
  EndIf
End Function ;Wurde keine Ziffer erkannt, wird von 'End Function' 0=False zurück gegeben

Anweisungen[Bearbeiten]

Eine Anweisung wird ebenso wie eine Funktion definiert, hat jedoch keinen Rückgabewert. Während der Aufruf von Funktionen immer in Vergleichen, oder Wertzuweisungen an Variablen erfolgt, können Anweisungen auch alleine in einer Zeile stehen. Beim Aufruf von Anweisungen können die Klammern um die Parameter weggelassen werden. (Bei der Definition müssen sie jedoch die Parameter umschließen)

Beispiel[Bearbeiten]

;Die Anweisung leitet die Ausgaben des aktuellen Programms auf ein 32Bit-Vollbild um
Function Fullscreen(W%,H%)
  EndGraphics ;eventuell vorherige Darstellung beenden
  Graphics W,H,32,1 ;Vollbildmodus einschalten
End Function

Um jetzt ein Programm im Vollbildmodus von 800x600 Pixel laufen zu lassen, reicht der Aufruf der Anweisung (ohne Klammern)

Fullscreen 800,600