Typisch für alle Basic-Dialekte ist die Eigenschaft, dass Variablen eigentlich nicht deklariert werden müssen. Sobald Sie einen Bezeichner schreiben, der bisher nicht bekannt war, wird er automatisch angelegt und mit 0 bzw. leer (empty) gefüllt (implizite Variablen). Das ist natürlich nicht immer sinnvoll, vor allem wenn man sich vertippt! Sie können die Zwangsdeklaration einschalten, indem Sie im Codefenster bei den Deklarationen Option explizit schreiben. Wenn Sie Variablen deklarieren, geben Sie den Namen und den Typ an, also was die Variable enthalten soll. Eine Wertzuweisung erfolgt erst später! Es gibt in VisualBasic zwei Deklarationensanweisungen: Dim Variablenname As Variablentyp oder nur innerhalb eines Moduls als globale Deklaration: Global Variablenname As Variablentyp 1 Die Anweisung Dim kann außerhalb einer Prozedur (ganz oben im Deklarationsteil einer Form) stehen, dann ist die Variable in der ganzen Form bekannt. (Aber nicht in anderen Formen!) Oder die Anweisung steht innerhalb einer Prozedur (ganz am Anfang), dann ist die Variable nur in dieser Form bekannt (lokale Deklaration). Codeteil - Form1: Dim Text As String Private Sub Form_Load () Dim Zahl As Integer Zahl = 5 Text = "Hallo" Private Sub bn_ende_click () Dim Wert As Single Wert = 3.14 Text = "Welt" Codeteil - Form2: Private Sub Form_Load () Dim Zahl As Double Zahl = 2.71 Variable Zahl ist bekannt, Variable Text ist bekannt. Variable Zahl ist hier unbekannt, Variable Wert ist bekannt, Variable Text ist bekannt. Variable Zahl ist hier unbekannt, kann neu deklariert werden, Variable Text ist unbekannt (existiert nur in Form1) 2
Die Anweisung Global kann ausschließlich in einem Modul und nur außerhalb einer Prozedur stehen (Ganz oben im Modul). Die Variable ist dann im ganzen Projekt in jeder Form und Prozedur bekannt (globale Deklaration). Codeteil - Module1: Global Meldung As String Dim Nachricht As String Public Sub Berechne() Dim Zahl As Long Zahl = 2500 Nachricht = "Hallo!" Meldung = "Ach so!" Variable Zahl ist hier unbekannt und kann neu deklariert werden. Variable Nachricht ist nur lokal im Modul bekannt! Variable Meldung ist im ganzen Projekt bekannt. Codeteil - Form1: Dim Text As String Private Sub bn_ende_click () Dim Wert As Single Wert = 3.14 Text = Meldung Variable Wert ist bekannt, Variable Meldung ist global bekannt, Nachricht unbekannt! Variable Text ist lokal in der ganzen Form bekannt. 3 Generell kann statt der langen Schreibweise As Variablentyp auch ein spezifisches Kürzel hinter dem Variablennamen angegeben werden. Zum Dim Text As String oder identisch mit dem Kürzel $: Dim Text$ Dieses Kürzel gehört aber dann zum Namen und sollte nicht weggelassen werden! Wenn Sie wollen, können Sie auch mehrere Deklarationen in eine Zeile schreiben und einfach mit Kommas trennen. Zum Dim Wert As Integer, Text As String, A$, B$ Vorsicht! Wenn Sie Kürzel und Variablentyp weglassen, wird automatisch der Typ Variant (= Universaltyp) erzeugt! Einfache Tippfehler erzeugen somit ohne explizite Deklaration immer neue leere Variablen! 4
Strings bzw. Zeichenketten, Kürzel: $ Texte werden immer in "Anführungszeichen" eingeschlossen. Anführungszeichen selbst können demzufolge nur dadurch benutzt werden, in dem man ihren Ascii-Code angibt (z.b. Chr$(34)) oder das Zeichen im Text doppelt schreibt:... ""... Beispiele: Dim Text As String Dim A$, B$ Text = "Heute ist Freitag" B$ = "13" C$ = A$ D$ = Text + ",der " + B$ 'Texte können "addiert" werden bzw. D$ = Text & ",der " & B$ 'können zusammengezogen werden Neben solchen dynamischen Zeichenketten, die bis zu 2 Milliarden Zeichen umfassen können, gibt es auch statische bzw. fixe Zeichenketten mit fester Länge: Dim Vorname As String*10 'feste Zeichenzahl: genau 10 Zeichen lang. 'mehr wird einfach abgeschnitten, weniger mit 'Leerzeichen gefüllt! 5 Ganze Zahlen: Integer und Long, Kürzel: % und & Ganze Zahlen haben keinen Nachkommaanteil (d.h. er fällt einfach weg). Sie benötigen sehr wenig Speicherplatz (16Bit bzw. 32Bit) und es gibt spezielle Prozessorbefehle dafür. Dadurch werden Berechnungen besonders schnell! Da sie nur 16Bit groß sind, ist die größte ganze Zahl auf 2 15 = 32767 und die kleinste auf -2 15 = -32768 festgelegt. Bei Long mit 32Bit sind es 2 31 = ca. ±2Mrd. Beispiele: Dim nummer As Integer oder kurz: Dim nummer% nummer% = 12345 Ergebnis% = 1234*10+5 HexZahl% = &H1A2 'Berechnungsausdruck als Wertzuweisung '&H = Hex-Präfix, &O = Oktal-Präfix Dim GrosseZahl As Long oder kurz: Dim GrosseZahl& Global GrosseZahl& GrosseZahl& = 123456789 6
Ganze Zahlen: Anwendung in For-Schleifen Ganze Zahlen werden bevorzugt in Programm-Schleifen als Zählervariable eingesetzt. Eine einfache Möglichkeit ist die For-Next-Schleife: For i% = Startwert to Endwert Step Schrittweite Anweisungen Next i% 'oder einfach nur: Next For i% = 1 to 100 me.print i% Next 'druckt die Zahlen 1 bis 100 in die Form 'erhöht den Zähler i% um die Schrittweite For n& = 100 to 1 Step -2 me.print n& 'druckt die Zahlen 100 bis 2 in 2er Next 'Schritten in die Form: 100, 98, 96, 7 Fließkommazahlen: Kürzel:!, # und @ Kommazahlen haben wegen ihrer Größe eine festgelegte Genauigkeit: Typ: Single Kürzel:! Genauigkeit: 8 Stellen (32Bit) Typ: Double Kürzel: # Genauigkeit: 16 Stellen (64Bit) Typ: Currency Kürzel: @ Genauigkeit: 4 Nachkommastellen (64Bit) Obwohl diese Variablen mit riesigen Zahlen (10 38 bzw. 10 308 ) hantieren können, ist die Genauigkeit auf wenige Ziffern beschränkt! Tipp: Wenn Sie im Bereich ±999 bzw. ±0.001 bleiben, können Sie ruhig den Typ Single verwenden. Für alles andere verwenden Sie besser doppelte Genauigkeit mit Double. Beispiele: Dim zahl As Single oder Dim zahl! PI! = 3.141593 'die 8. Stelle zum Runden! PI# = 3.14159265358979 'die 16. Stelle zum Runden! BillysVermögen@ = 922337203685477.5807 Beachten Sie, dass Kommazahlen einen Dezimalpunkt (amerikanische Schreibweise) enthalten! 8
Variant: ohne Kürzel Der Universal-Typ Variant wurde 1991 in VB eingeführt und setzte sich schnell durch, so dass er heute in jeder Programmiersprache zur Verfügung steht und in einigen Skriptsprachen sogar der einzige Typ ist! Dieser Variablentyp passt sich dynamisch an den jeweiligen Inhalt an: mal ist er String, mal ist er Zahl, ganz nach Bedarf. Jede undeklarierte Variable ohne Kürzel ist automatisch ein Variant! Dim Wert As Variant oder einfach: Dim Wert Wert = "Hallo" Wert = 5.98 Vorsicht! print Wett 'ein Tippfehler (t statt r) deklariert einen neuen leeren Variant Werrt = 3.14 'versehentlich zwei r erzeugen einen neuen Variant 9 Weitere Variablen und Konstanten Neben diesen wichtigen Typen gibt es auch noch weitere: As Byte, As Boolean, As Date, As Object Neben Variablen kann man auch Konstanten deklarieren. Statt mit Dim beginnt man dann mit Const oder im Modul mit Global Const und schreibt hinter die Deklaration gleich den entsprechenden Wert. Const Pi As Single = 3.141593 Const c As Double = 299792458 Const Kurs! = 1.4623 im Modul: Global Const EE As Double = 2.71828182845905 10
Benutzerdefinierte Typen - Strukturen In vielen Fällen reicht ein Variablentyp nicht aus ( Artikel/ Video/Musik-Datenbank). Hier werden mehrere Angaben zu einer neuen Datenstruktur zusammengefasst. Das Ergebnis verhält sich wie ein "normaler" Typ. Type Strukturname UnterVar1 As Variablentyp UnterVar2 As Variablentyp UnterVar3 As Variablentyp End Type Um diesen neuen Typ zu verwenden, muss dann eine Variable mit dem neuen Typ deklariert werden: Dim Variable As Strukturname Anschließend kann man die Variable und deren Unterstruktur mit der üblichen Syntax (Punkt dazwischen) füllen oder abfragen: Variable.UnterVar1 = Wert Print Variable.Untervar2 11 Variablenfelder (Arrays) Benutzerdefinierte Datenstrukturen machen meist nur dann einen Sinn, wenn man mehrere/viele Variablen füllen kann ( MP3-Verwaltung). Um nicht für jeden Satz einen neuen Namen zu benötigen, erzeugt man ein Variablenfeld mit einem Index, also einer Nummer (Datensatznummer): Dim Variable(0 to 10) As Variablentyp/Strukturname oder (weil der untere Index automatisch mit 0 beginnt): Dim Variable(10) As Variablentyp/Strukturname In diesem Fall stehen 11 Variablen zur Verfügung (0 bis 10). Sie werden mit ihrer Indexnummer angesprochen: Variable(0).UnterVar1 = Wert1 Variable(0).UnterVar2 = Wert2 Variable(1) = Variable(0) 'Strukturwerte füllen 'Kompletten Satz übernehmen 12
Variablenfelder (Arrays) Der Index kann natürlich auch mit anderen Werten definiert werden: Dim Array(-3 to 10) As Variablentyp '14 Einträge Array(1) = "vier" Array(-2) = "zwei" Wenn eine feste Indexzahl nicht reicht (ist meist der Fall) muss man das Array dynamisch definieren. Dazu wird nur die leere Klammer angegeben: Dim Array() As Variablentyp 'dynamisches Array ohne feste Größe Später wird dann in einer Prozedur mit Redim (Arrayinhalte werden gelöscht) bzw. Redim preserve (Arrayinhalte bleiben erhalten) die Indexgröße angepasst: Redim Array(5) As Variablentyp 'Inhalte löschen, 6 neue Variablen anlegen Redim preserve Array(9) As Variablentyp '4 Variablen dazufügen Redim preserve Array(7) As Variablentyp 'letzten 2 Variablen gelöscht 13 Mehrdimensionale Variablenfelder (Arrays) Es ist in VisualBasic problemlos möglich auch zwei- oder mehrdimensionale Variablen zu definieren: Ein zweidimensionales Variablenfeld (Matrix): Dim Array(0 to 9, 0 to 5) As Variablentyp '10x6 = 60 Einträge Array(1,2) = "vier" 'X=1, Y=2 Array(0,5) = "zwei" 'X=0, Y=5 Ein dreidimensionales Variablenfeld: Dim Lager(5, 5, 5) As Variablentyp Lager(1,2,3) = "Schraube" Array(0,0,1) = "Motor" '6x6x6 = 216 Einträge Achtung! Bei dynamischen Arrays kann nur die letzte Dimension mit redim geändert werden! 14