Einfache Sprachkonzepte
Folgende grundlegende Datentypen gibt es in
Visual Basic.
| Datentyp | Bedeutung | Bereich | Größe |
|---|---|---|---|
| Byte | vorzeichenlose Ganzzahl | 1 bis 255 | 1 Byte |
| Boolean | Boolescher Datentyp | TRUE oder FALSE | 2 Bytes |
| Integer | Vorzeichenbehaftete Ganzzahlen (16-Bit) | -32,768 bis 32,767 | 2 Bytes |
| Long | Vorzeichenbehaftete Ganzzahlen (32-Bit) | -2,147,483,648 bis 2,147,483,647. | 4 Bytes |
| Single | Gleitpunktzahlen (einfache Genauigkeit) | -3.402823E38 bis -1.401298E-45; 1.401298E-45 bis 3.402823E38 | 4 Bytes |
| Double | Gleitpunktzahlen (doppelte Genauigkeit) | -1.79769313486232E308 bis -4.94065645841247E-324; 4.94065645841247E-324 bis 1.79769313486232E308 | 8 Bytes |
| Currency | Währung (geeignet für Berechnungen mit hoher Genauigkeit) | -922,337,203,685,477.5808 bis 922,337,203,685,477.5807 | 8 Bytes |
| String | Zeichenfolge | 0 bis ca. 2 Milliarden (ca. 65,400 für Microsoft Windows 3.1 und früher) | 10 Bytes + Stringlänge |
| Date | Datum | 01.01.100 bis 31.12.9999 | 8 Bytes |
[PRIVATE | PUBLIC] TYPE
Datentypname
Elementname [([Indizes])] AS Typ
[ Elementname [([Indizes])] AS Typ]
. . .
END TYPE
Mit dieser Anweisung wird ein Record (Datenverbund) definiert.
Datentypname und Elementname müssen gültige Bezeichner sein.
Die angegebenen
Typen müssen entweder Standard-Datentypen oder bereits definierte eigene Typen
sein.
Die Indizes werden zur Definition von Arrays verwendet. (Darauf werden wir
im nächsten Abschnitt noch kommen.)
Mit den Prädikaten PRIVATE und
PUBLIC wird festgelegt, ob der Typ auch in anderen Modulen benutzbar
ist
oder nur in dem aktuellen Modul.
Beispiel:
TYPE-Anweisung
In diesem Beispiel vereinbaren wir einen neuen Typ
KomplexeZahl, der als Daten den Real- und Imaginärteil enthält.
TYPE KomplexeZahl
Realteil AS Single
Imaginärteil AS Single
END TYPE
Beispiel: Zugriff auf Elemente eines Records
Der Zugriff auf
einzelne Elemente einer Variable dieses Datentyps erfolgt durch den Selektor '.'
Variablenname.Elementname. So wird unten der Real- und Imaginärteil
einer Variablen z vom Typ KomplexeZahl gesetzt.
z.Realteil = 120.3
z.Imaginärteil = 454.1
Die Variablendeklaration hat die Aufgabe,
dem Compiler/Interpreter mitzuteilen, dass man eine Variable mit dem angegebenen
Namen und dem festgelegten Typ ab sofort im kommenden Code-Abschnit benutzen
will. Dieser kann nun entsprechend viel Platz im Speicher, d.h. im Allgemeinen
auf dem Stack, anfordern.
In welchem Programmbereich die Variable nun gilt,
ist verschieden. Theoretisch kann sie nur in der aktuellen Prozedur oder
aktuellen Funktion, innerhalb des Moduls, der Klasse oder im gesamten Programm
gelten. Aber dazu mehr im Abschnitt 1.1.5
Gültigkeitsbereich.
Eigentlich muss man in Standard-Basic keine
Variablen vereinbaren. Man sollte sich aber angewöhnen, alle Variablen zu
vereinbaren. Mit OPTION EXPLICIT im Deklarationsabschnitt kann man die
Variablendeklaration erzwingen, d.h. nicht vereinbarte Variablen erzeugen einen
Fehler. Der Vorteil bei der erzwungenen Deklaration ist, dass man bei einem
Tippfehler in einem Variablennamen eine Fehlermeldung bekommt, und diese nicht -
wie sonst - als neue Variable aufgefasst wird.
Die Variablendeklaration
hat die folgende Syntax:
DIM Variablenname[([Indizes])][AS [New] Typ]
[, Variablenname[([Indizes])][AS [New] Typ]]
Der Variablenname muss wieder ein gültiger Bezeichner, Typ ein gütiger
Datentyp sein. Die Indizes werden zur Deklaration von Arrays verwendet
(s.unten).
Beispiel: Variablenvereinbarung mit DIM
Um eine
Variable x vom Typ Integer und s vom Typ String zu deklarieren nimmt man
folgenden Code:
DIM x AS INTEGER
DIM s AS STRING
Records, die zusammengesetzten Datentypen, können auf gleiche Weise
vereinbart werden.
Neben den Records gibt es noch die Möglichkeit Arrays
zu vereinbaren. Arrays sind ein- oder mehrdimensionale Felder (Vektoren oder
Matrizen) bestehend aus einer festen Zahl von Elementen gleichen Datentyps. Sie
enthalten also homogene Daten, während Records ja aus vollkommen
unterschiedlichen Datentypen zusammengesetzt sein können.
Zur Vereinbarung
von Arrays wird zwischen dem Variablennamen und der AS Klausel in
Klammern ein- oder mehrdimensionale Arraygrenzen festgelegt. Die Anzahl der
Dimensionen eines Arrays kann theoretisch 60 betragen.
Die Syntax für die
Arraygrenzen ist:
[Untergrenze TO] Obergrenze [,[Untergrenze TO]
Obergrenze] . . .
DIM Vektor (2) AS SINGLE
DIM Matrix (0 TO 10, 0 TO 10) AS SINGLE
DIM Schachbrett (1 TO 64, 1 TO 64) AS INTEGER
LBOUND (Array[, Dimension])
UBOUND (Array[, Dimension])
Dabei ist Array ein Variablename eines deklarierten Arrays und Dimension
gibt die Nummer der fraglichen Dimension an. Für die erste Dimension muss 1, für
die zweite 2, usw. angegeben werden. Wird die Dimension weggelassen, so wird
standardmäßig die erste Dimension angenommen.
Beispiel: Unter- und
Obergrenze eines Arrays bestimmen
Es sei der folgende Array vereinbart:
DIM a (3 TO 7, 0 TO 4, 1 TO 10) AS INTEGER
Die Funktionen ergeben dann:
| Dimension | Untergrenze LBOUND | Obergrenze UBOUND |
|---|---|---|
| 1 | LBOUND (a, 1) = 3 | UBOUND (a, 1) = 7 |
| 2 | LBOUND (a, 2) = 0 | UBOUND (a, 2) = 4 |
| 3 | LBOUND (a, 3) = 1 | UBOUND (a, 3) = 10 |
Im Gegensatz zu Variablendaklaration ist die
Variablenzuweisung oder auch Variablendefinition dafür zuständig, Werte an
bereits vereinbarte Variablen zuzuweisen. Der Zuweisungsoperator ist dabei das
Istgleich-Zeichen '='. Wie schon erwähnt werden Elemente eines Records über den
Selektor '.' angesprochen, einzelne Elemente eines Arrays werden durch Angabe
eines ein- oder mehrdimensionalen Index angesprochen.
Die Syntax der
Zuweisung ist:
[Variablenname] = [Wert]
Beispiel: Variablenzuweisung
DIM x AS INTEGER, s AS STRING, a (10,20) AS SINGLE
x = 25
s = "HALLO, WORLD!"
a(0,0) = 2.0
Strings werden also auch mit Hilfe des Zuweisungsoperators definiert!
Zu
beachten ist, dass der Zuweisungsoperator identisch mit dem Vergleichsoperator
ist!
Vgl. dazu den nächsten Abschnitt.
Beispiel: Zugriff auf ein
Array
In diesem Beispiel wird für einen Array v (mit den Grenzen 0 bis
2), der einen Vektor darstellt, die Länge berechnet. Sqr(x) ist dabei die
Quadratwurzel der Zahl x und ^ ist der Operator für die Potenzierung (vgl.
nächster Abschnitt). Auf die einzelnen Komponenten wird mit v(i) zugegriffen.
DIM v(2) AS SINGLE
DIM length AS SINGLE
length = sqr(v(0)^2 + v(1)^2 + v(2)^2)
| - | Addition |
| - | Subtraktion |
| * | Multiplikation |
| / | Division |
| \ | Ganzzahldivision |
| MOD | Modulo-Operator (Rest bei Ganzzahldivision) |
| ^ | Exponentiation (Potenzierung) |
| AND | Bitweises Und |
| OR | Bitweises Oder |
| XOR | Bitweises exklusives Oder |
23 / 5 = 4 und 23 mod 5 = 3, also 23
= 4 * 5 + 23 mod 5.
Vergleichs-Operatoren
| Istgleich | |
| < | echt kleiner |
| > | echt größer |
| <= | kleiner gleich |
| >= | größer gleich |
| Zuweisung | |
| = | Vergleich |
| < | kleiner |
| > | größer |
| <= | kleiner gleich |
| >= | größer gleich |
| + oder & | Verkettung von Zeichenketten |
| Operator | Bedeutung | In Zeichen | Ist TRUE genau dann, wenn |
|---|---|---|---|
| AND | Und | A AND B | sowohl A und B TRUE sind. |
| OR | Oder | A OR B | A oder B oder beide TRUE sind. |
| XOR | Exklusives Oder | A XOR B | entweder A oder B, aber nicht beide TRUE sind. |
| NOT | Logische Nicht | NOT A | A FALSE ist |
| IMP | Implikation | A IMP B | A gilt, so ist auch B TRUE. |
| EQV | Äquivalenz | A EQV B | A genau dann gilt, wenn B gilt. |
Den Zuweisungsoperator hatten wir bereits:
| = | Zuweisung |
DIM x AS INTEGER
Folgende Anweisung (im Bereich "declarations" eines Moduls) vereinbart eine globale Variable.GLOBAL x AS INTEGER
Mathematische FunktionenVisual Basic besitzt eine Reihe von mathematischen Funktionen. Die Syntax ist dabei stets die gleiche.F(x)
Beispiele sind zu jeder Funktion separat aufgeführt.
Bei den
trigonometrischen Funktionen ATN, COS, SIN und
TAN werden Winkel stets im Bogenmaß angegeben.
Dieser liegt dann im
Bereich -2*PI und +2*PI, während ein Winkel in Grad zwischen 0° und 360°
liegt.
Zur Umwandlung eines Winkels ALPHA im Gradmaß in einen Winkel X im
Bogenmaß und umgekehrt
gelten die folgenden Formeln, wobei PI die Kreiszahl ist
(PI ist ungefähr 3.1415926535897932):
X = ALPHA * PI /180
ALPHA = X * 180 / PI
Absolutbetrag: ABS
ABS liefert den Absolutbetrag einer
Zahl. Für positive x ist ABS(x) = x, für negative x ist ABS(x) =
-x.
Beispielsweise wird durch
x = ABS(-123.66)
x = ABS(123.66)
in beiden Fällen x auf 123.66 gesetzt.
Arcus Tangens:
ATN
ATN berechnet den Arcus Tangens von x. Der Arcus Tangens ist
die Umkehrfunktion zum Tangens.
Das Ergebnis ist dabei ein Winkel im Bogenmaß.
PI = 4*ATN(1)
Mit Hilfe von ATN wurde hier PI ausgerechnet, denn
ATN(1) liefert PI/4 zurück. Siehe dazu auch das Beispiel zu TAN.
Cosinus: COS
COS liefert den Cosinus von x, wobei x
im Bogenmaß gegeben sein muss. Der Cosinus berechnet dabei das Verhältnis
zwischen Ankathete und Hypothenuse in einem rechtwinkligen Dreieck. Das Ergebnis
liegt stets zwischen -1 und 1.
PI = 3.1415926535897932
a = COS(0)
b = COS(PI/4)
In diesem Beispiel ist a = 1 und b = 0. Vgl. dazu auch den Sinus.
Exponentialfunktion: EXP
Die Exponentialfunktion EXP
berechnet ex, wobei e die Eulersche Zahl ist (e ist ungefähr
2.718282). Das Ergebnis ist stets positiv. Die Umkehrfunktion zu EXP
ist der Logarithmus LOG
a = EXP(0)
e = EXP(1)
In diesem Beispiel ist a = 1 und e ist die Eulersche
Zahl.
Floor-Funktion: FIX
Die FIX Funktion liefert die
größte ganze Zahl z mit z < x. In der Mathematik ist das die sogenannte
Floor-Funktion oder auch manchmal Gaußsche Klammer.
z1 = FIX(12.5)
z2 = FIX(-12.5)
In diesem Beispiel setzt z1 = 12 und z2 = -13. Man beachte den Unterschied
zur INT Funktion!
Ganzzahlanteil: INT
Die INT
Funktion schneidet von einer reellen Zahl die Nachkommastellen ab und liefert
diese Zahl zurück.
z1 = INT(12.5)
z2 = INT(-12.5)
In diesem Beispiel setzt z1 = 12 und z2 = -12. Zu beachten ist der
Unterschied zur FIX Funktion!
Natürlicher
Logarithmus: LOG
LOG berechnet den Logaritmus zur Basis e
(die Eulersche Zahl, e ist ungefähr 2.718282). Dies ist der sogenannte
natürliche Logarithmus. Es sind nur positive Argumente erlaubt.
a = LOG(EXP(x))
Durch diese Anweisung ist a = x gesetzt worden, da LOG die
Umkehrfunktion von EXP ist. Wird ein Logarithmus zu einer anderen Basis
n benötigt, so wird dieser durch folgende Funktion berechnet:
FUNCTION Logn(x)
logn = LOG(x) / LOG(n)
EXIT FUNCTION
Zufallszahl: RND
RND liefert eine (Pseudo-)Zufallszahl
zurück, die größer oder gleich 0 und echt kleiner als 1 ist. Das Argument x hat
dabei eine besondere Bedeutung.
Ist x < 0, so liefert RND
stets die gleiche Zufallszahl.
Ist x = 0, so liefert RND die letzte
Zufallszahl.
Ist x > 0 oder wird x weggelassen, so wird die nächste
Zufallszahl in der Folge von Zahlen zurückgegeben.
Um "zufällige" Werte
zu erhalten, sollte man den Zufallszahlengenerator zu Beginn mit RANDOMIZE
TIMER mit einem zufälligen Startwert (nämlich mit Hilfe der aktuellen Zeit)
initialisieren.
Int((Obergrenze - Untergrenze + 1) * RND + Untergrenze)
Diese Anweisung liefert eine Ganzzahl zwischen den angegebenen Grenzen.
Vorzeichenfunktion (Signum): SGN
SGN liefert je nach
Vorzeichen des Arguments x die Werte -1 (für x < 0), 0 (für x = 0) oder +1
(für x > 0).
a = x * SGN(x)
Diese Anweisung hat die gleiche Wirkung wie a = ABS(x).
Sinus: SIN
SIN liefert den Sinus von x, wobei
x im Bogenmaß gegeben sein muss. Der Sinus berechnet dabei das Verhältnis
zwischen Gegenkathete und Hypothenuse in einem rechtwinkligen Dreieck. Das
Ergebnis liegt stets zwischen -1 und +1.
PI = 3.1415926535897932
a = SIN(0)
b = SIN(PI/4)
In diesem Beispiel ist a = 0 und b = 1. Vgl. dazu auch den Cosinus
Quadratwurzel: SQR
Die Funktion SQR berechnet die
positive Quadratwurzel einer nicht-negativen Zahl x. Für negative Argumente wird
ein Fehler ausgelöst. Es gilt: SQR(x)^2 = x.
a = SQR(x)
b = a ^ 2
Die Variable b enthält den gleichen Wert wie x.
Tangens: TAN
Diese Funktion liefert den Tangens des
Winkels x. Dabei muss x im Bogenmaß angegeben werden. Das Ergebnis ist das
Verhältnis Gegenkathete durch Ankathete in einem rechtwinkligen Dreieck, wobei
der von Hypothenuse und Ankathete eingeschlossene Winkel x ist.
PI =
3.1415926535897932
result = TAN(PI/4)
In diesem Beispiel wird 1 zurückgegeben, da die beiden Katheten bei x =
PI/4 gleich lang sind.
String-Operationen
Beispiele: String-Operationen
Die folgenden Beispiele
demonstrieren den Umgang mit den String-Operationen LEN, LEFT,
MID und RIGHT.
DIM s1 AS STRING, s2
AS STRING, s3 AS STRING, s4 AS STING
DIM l AS INTEGER
s1 = "1234567890"
' Die Länge l ist 10 l = LEN(s1)
' s2 wird zu "123" s2 = LEFT(s1, 3)
' s3 wird zu "456" s3 = MID(s1, 4, 3)
' s4 wird zu "890" s4 = RIGHT(s1, 3)