Visual Basic 6: Variablen

Aus Wikibooks

Variablen[Bearbeiten]

Ein Programm, welches nur "Hallo Welt" ausgibt, ist langweilig. Ein größeres Programm, beispielsweise ein Taschenrechner, muss, wenn er zwei Zahlen zusammenzählen will, eine Zahl irgendwo zwischenspeichern, so lange der Nutzer die zweite Zahl eintippt.

Hier kommen Variablen ins Spiel. Eine Variable kann grundsätzlich fast alles speichern, je nach Zweck wird ihr ein entsprechender Typ zugewiesen.

Deklaration[Bearbeiten]

Jetzt ein wenig Fachjargon: Wenn Programmierer eine Variable erstellen, dann sprechen sie von Deklarieren. In Visual Basic (VB) ist das nicht schwer. Die einfachste Methode ist, die Anweisung Dim zu verwenden, gefolgt von dem Namen der neuen Variablen:

 Dim Variablenname 

Schon haben wir eine Variable erstellt. Der Name ist zwar nicht sonderlich originell, aber daran kann man ja noch arbeiten. Das dumme ist nur, dass VB jetzt noch nicht weiß, was wir mit der Variable machen wollen. Wir könnten Zahlen in sie schreiben, um mit ihr zu rechnen oder Text darin speichern. Deshalb muss VB sich alle Möglichkeiten offenhalten. Das ist aber nicht so günstig, weil es das Programm langsamer macht und mehr Arbeitsspeicher verbraucht.

Datentypen[Bearbeiten]

Die Lösung für dieses Problem heißt Datentyp. Wenn wir einer Variable einen Datentyp zuweisen, teilen wir VB mit, was wir mit der Variablen vorhaben. Da es sehr viele verschiedene Verwendungszwecke für Variablen gibt, gibt es logischerweise auch viele Datentypen. Die meisten davon sind allerdings für Zahlen gedacht. Man fragt sich jetzt natürlich, warum man für Zahlen gleich mehrere Typen von Variablen braucht, das hat allerdings eine ganz praktische Ursache. Weil VB immer davon ausgehen muss, dass man sehr große Zahlen speichern will, reserviert es für eine Zahlenvariable sehr viel Arbeitsspeicher. Wenn wir jetzt aber anstelle einer 27-stelligen Zahl nur Zahlen zwischen 1 und 15 speichern wollen, brauchen wir diesen ganzen Platz nicht. Deshalb gibt es verschiedene Datentypen für Zahlen, die sich nur durch die maximale Größe der zu speichernden Zahlen unterscheiden.

Folgende Datentypen für Zahlen kennt VB:

Type Wertebereich Speicherbedarf
Boolean Klassisches Wahr oder Falsch. Kann True (Wahr, entspricht der Zahl -1) oder False (Falsch, entspricht der Zahl 0) sein. Alles, was ungleich 0 ist, wird normalerweise als True/Wahr interpretiert. 2 Byte
Byte Ganzzahl, 0 bis 255, oder einfach: 8 Bits. 1 Byte
Integer Ganzzahl, Werte von -32.768 bis 32.767 2 Byte
Long Ganzzahl, Werte von -2.147.483.648 bis 2.147.483.647, 4 Bytes (32 Bits), gebräuchlichster und schnellster Datentyp für alle Zwecke 4 Byte
Single Gleitkommazahl, Werte von -3,402823e38 bis -1,401298e-45 und 1,401298e-45 bis 3,402823e38 4 Byte
Double Gleitkommazahl, -1,79769313486232e308 bis -4,94065645841247e-324 und 4,94065645841247e-324 bis 1,79769313486232e308 8 Byte
Currency -922.337.203.685.477,5808 bis 922.337.203.685.477,5808. Geeignet für Währungen, deswegen auch nur 4 Nachkommastellen möglich 8 Byte

Es gibt natürlich auch noch Datentypen für andere Zwecke:

String Eine Zeichenkette, die bis zu 2 Milliarden Zeichen enthalten kann (1 Zeichen = 2 Bytes, da VB Unicode verwendet). Die Beschränkung auf 4 Milliarden Bytes liegt darin begründet, dass VB intern im Arbeitsspeicher sich die Länge einer Zeichenkette mit einer Variable des Typs unsigned Long (d. h. ohne Vorzeichen) merkt - und da ist bei 4 Milliarden Schluss.
Date Für Datum und Zeit. Achten Sie unbedingt darauf, dass das Datum im VB-Code in folgender Form eingegeben werden muss: #12/24/2005 12:00:00 PM#. VB ist ein internationales Produkt, deshalb steht der Monat vor dem Tag, und Uhrzeiten werden mittels AM/PM unterschieden. Intern werden Datumswerte als Double-Wert abgespeichert (Vorkommazahlen sind das Datum, Nachkommazahlen die Uhrzeit. Achtung: Bei der Verarbeitung von Datumsangaben, versucht VB immer das "Beste" herauszuholen. Eine eigentlich fehlerhafte Angabe wie #13/05/2006# wird nicht mit einer Fehlermeldung beantwortet, sondern wird automatisch zu #05/13/2006# umgeformt.
Variant Kann alles mögliche sein, benötigt dafür auch den meisten Speicher. Bei der Verwendung diesen Typs verlangsamt sich die Programmausführung extrem.
Object Speichert einen Verweis auf ein Objekt, zum Beispiel unseren Button.
Decimal Ein Spezialfall, kann nicht direkt verwendet werden - dafür allerdings der größte Wertebereich zwischen +/-79.228.162.514.264.337.593.543.950.335 bei 0 Nachkommastellen, +/-7,9228162514264337593543950335 bei 28 Nachkommastellen. Je größer die Zahl ist, desto weniger Nachkommastellen können gespeichert werden. Die näheste speicherbare Zahl, die nicht 0 ist, ist 0,0000000000000000000000000001.

Verwenden wir also unsere erste Variable. Ändern Sie den bisherigen Code wie folgt:

Private Sub Command1_Click()
 Dim Ausgabe As String
 Ausgabe = "Hallo Welt"
 MsgBox Ausgabe
End Sub

Hier ist erst einmal eine Erklärung notwendig.

Dim Ausgabe As String

Dies deklariert eine Variable namens Ausgabe und sagt VB, dass diese Variable einen String enthält. Dies ist aus Performance-Gründen dringend zu empfehlen...

Tipp1: Sie sollten unbedingt Extras, Optionen, Editor, Variablendeklaration erforderlich aktivieren - dann wird VB Sie gnadenlos zwingen, jede Variable zu deklarieren. Was sich im ersten Moment hart anhört, ist eine sehr, sehr praktische Funktion - so schließen Sie Tippfehler aus, zwingen sich selbst, Variablen zu deklarieren und damit die Performance zu erhöhen, und sparen sich die Fehlersuche nach Tippfehlern. Ob die Option eingeschaltet ist, erkennen sie daran, dass in jedem Code-Fenster, das sie öffnen, ganz oben in der ersten Zeile Option Explicit steht.

Tipp2: Variant ist ein sehr flexibler Datentyp. Setzen Sie ihn aber mit Bedacht ein. Variant ist dafür gedacht, wenn Sie den Datentyp nicht eindeutig festlegen können. Sollten Sie zu dem Schluß kommen, dass Variant unumgänglich sein, prüfen Sie die enthaltenen Werte genau, bevor Sie sie weiterverwenden. Andernfalls ist ein schwer zu durchschauendes Fehlverhalten zu befürchten.

Tipp3: Es ist hilfreich, sich von Anfang an bewusst zu sein das Object und mit As Klasse deklarierte "Variablen" nur Zeiger sind. Während z. B. ein Long-Datentyp den Wert selbst enthält, wird bei Object nur auf eine Speicherstelle gezeigt, die wiederum nur eine Struktur (die Klasse) enthält. Bei String wird auch nicht der Wert direkt gespeichert (s. o.). Bei String kann aber immer nur eine Variable auf dieselbe Speicherstelle zeigen, so dass sich hier bei der Nutzung keine praktischen Unterschiede ergeben. Daher ist es sehr zu empfehlen, sich von Anfang an beim deklarieren gedanklich und sprachlich zwischen Variablen und Objektzeigern zu unterscheiden.

Gültigkeit von Variablen[Bearbeiten]

Das Dim im obigen Code zeigt VB, dass die Variable nur innerhalb der Funktion Command1_Click existieren soll. Wird die Funktion verlassen, ist der Inhalt weg.

Variablen lassen sich auch außerhalb von Funktionen deklarieren, hier ein Beispiel:

Private Ausgabe As String

Private Sub Form_Load()
 Ausgabe = "Hallo Welt"
End Sub

Private Sub Command1_Click()
 MsgBox Ausgabe
End Sub

Form_Load ist wieder ein Ereignis wie Command1_Click - es wird aufgerufen, wenn das Fenster geladen/geöffnet wird. Hier wird die Variable mit Private außerhalb einer Funktion deklariert - sie ist also so lange verfügbar, wie das Formular geöffnet/geladen ist.

In einem Modul (lernen wir später kennen) könnte man die Variable als Public deklarieren - dann würde diese existieren, so lange das Programm läuft.

Private Sub Command1_Click()
 Static C As Long
 C = C + 1
 MsgBox C
End Sub

Dies ist ein Spezialfall. Zu dem C = C + 1 komme ich gleich noch. Sehen Sie bitte auf Static: Dieses Wort sorgt dafür, dass die Variable nicht einfach verschwindet, wenn die Funktion verlassen wird. Wird die Funktion ein zweites Mal aufgerufen, steht automatisch der alte Wert wieder zur Verfügung.

Es ist übrigens empfehlenswert, sämtliche Deklarationen der Variablen als erste Zeile der Prozedur zu schreiben - da sind sie gut aufgehoben.

Namen von Variablen[Bearbeiten]

Eine Variable kann einen beliebigen Bezeichner haben. Sie muss mit einem Buchstaben beginnen, kann beliebig viele Zahlen enthalten. Die Variablen können zwar nicht beliebig lang werden, für vernünftige Bezeichnungen ist aber allemal Platz. Der Name darf Umlaute und teilweise Sonderzeichen enthalten, welche das sind, muss im Einzelfall ausprobiert werden. Möglich sind aber:

Dim € As Long
Dim £ As Long
Dim ¬ As Long
Dim ®€™ƒ As Long
€ = 2
£ = 3
¬ = 4
®€™ƒ = 5

Übersichtlich ist so was allerdings nicht mehr; allgemein wird empfohlen, sich auf Buchstaben und maximal einer angehängten Zahl zu beschränken. Beginnt innerhalb des Variablennamens ein neues Wort, wird ein Großbuchstabe empfohlen:

Dim LangweiligerName as String

Darüber hinaus werden oft den Variablennamen Präfixe mitgegeben, die den Datentyp kennzeichnen:

Dim strNachname as String
Dim intZahl as Integer

Konstanten[Bearbeiten]

Konstanten sind unveränderliche Werte. Von ihrer Funktionsweise und Verwendung ähnelt eine Konstante einer Variablen. Ihr Wert wird jedoch während der Entwurfszeit im Quelltext definiert, und kann sich zur Laufzeit nicht mehr verändern.

Als Beispiel sei die Zahl π (Pi) genannt, deren Wert immer 3.14159... ist.

Die Gültigkeit von Konstanten ist wie bei Variablen auch auf den drei Ebenen Prozedur, Modul und Global möglich.

Die Deklaration von Konstanten geschieht mit dem Schlüsselwort Const.

Syntax:

[{Private|Public}] Const Konstantenname [As Datentyp] = Wert

Beispiele:

Public Const PI As Double = 3.14159 ' Gültigkeit im ganzen Projekt

Private Const PI As Double = 3.14159 ' Gültigkeit im gesamten Modul

Private Sub Test()
 Const PI As Double = 3.14159 ' Gültigkeit nur in dieser Prozedur
 Msgbox PI * 12
End Sub

Konstanten werden oft in Grossbuchstaben geschrieben, damit man Sie von Variablen unterscheiden kann.