| Dim-Anweisung |
Wolfgang Kluge |
Auch bei der Variablendeklaration und deren Gültigkeitsbereich hat sich was getan..
Bei der Deklaration kann man nun direkt Werte zuweisen, wie es aus Java schon bekannt ist.
Dies sieht auch nicht sehr verwunderlich aus, ist aber dennoch Gewöhnungsbedürftig.(Machen muß
dies natürlich niemand)
Dim x As Integer = 20
Bei den Variablen selbst hat sich sehr viel getan, auch wenn man (Oberflächlich betrachtet) mit den
wenigsten erstmal was zu tun hat. Die gröbste(nicht die größte!!) Änderung haben dabei die Datentypen Long und
Integer erfahren. Integer ist nicht länger ein 16Bit(2Bytes)-Zahlenwert mit einem Wertebereich
von -32.768 bis 32.767. Er wurde vielmehr zum Long-Wert aufgestuft (*g*) und benötigt damit 32Bit mit
einem Wertebereich von -2.147.483.648 bis 2.147.483.647. Long ist auch eine Stufe
höher getreten und somit der 64Bit-Wert.
Die Lücke die nach Adam-Riese überigbleibt wird mit dem Short-Datentyp gefüllt. Dieser stellt
also den Integer-Typ der Neuzeit dar..
Strings fester Länge
...gibt es einfach nicht mehr ;) Ein Versuch dies trotzdem zu versuchen führt daher unweigerlich zum
Fehler...mehr kann man dazu nicht schreiben(oder?)
Variant
Den Variant-Datentyp gibts leider auch nicht mehr. Aber nicht gleich erschrecken. Die Aufgabe des Variants übernimmt
nun der Object-Datentyp. Alle Vor- und Nachteile bleiben gleich..
Mehrere Deklarationen in einer Zeile
hier wurde wahre Arbeit geleistet ;) Eigentlich nichts weltbewegendes, aber dennoch eine sehr sinnvolle Änderung(wobei
sich ja immer und über alles streiten lässt)
Dim x, y As Single
Dim i, h
Dim a, b As String, c, d, e As Integer
bewirkete unter VB6, dass x, i, h, a, c und d vom Typ Variant, y vom Typ Single, b vom Typ String und e vom Typ Integer war/ist.
Unter vb.NET sieht es etwas anders aus. x und y sind beides Single-Datentypen, a und b vom Typ String, c, d und e sind
Integer-Variablen und i und h vom Typ Object(ehemals Variant)
Umständlicher hätt ichs bestimmt nicht schreiben können, aber es veranschaulicht doch hoffentlich, was ich damit sagen will *g*?!!?
Gültigkeitsbereich von Variablen
Der Gültigkeitsbereich oder auch die Sichtbarkeit von Variablen ist etwas umfangreicher geworden.
Innerhalb von Anweisungen (zB For..Next oder Do..Loop) können nun für die jeweilige Anweisung geltende Variablen
deklariert werden. Bisher war die unterste Ebene der Gültigkeit die Prozedurebene (Lokal).
Der Deklarationsteil dieser lokalen Variablen, so wurde mir zumindest immer nahegelegt, haben nur am Anfang
einer Prozedur was zu suchen, nie mittendrin oder am Ende(Übersichtlicher).
Nun hat dies eine verheerende Auswirkung auf die, die sich nicht daran gehalten haben.
Als Beispiel:
Dim i As Integer, a As String
a = "Hi"
If a = "ho" Then
Dim y As String
End If
For i=0 To 10
y = y & CStr(i)
Next
MsgBox y
Führt in VB6 dazu, dass eine MsgBox auftritt, die die Zahlenkolonne 012345678910 in sich stehen hat.
Unter vb.NET führt dies zu einem Fehler der besagt, dass die Variable y nicht deklariert wurde. Richtig
müsste es lauten
Dim i As Integer, a As String
Dim y As String
a = "Hi"
If a = "ho" Then
End If
For i=0 To 10
y = y & CStr(i)
Next
MsgBox y
Diese, auch aus C/C++ bekannte "Eigenart" ist eigentlich keine Eigenart. Jeder Anweisungsblock ist nach
außen abgeschlossen. Es herrscht ein strenges Lokalitätsprinzip.
Der bisher fehlende Sichtbarkeitsbereich
eines solchen Anweisungsblocks ist daher eine Eigenart von VB gewesen.
Durch die Bereicherung eines neuen
Gültigkeitsbereichs funktionieren nun Statements, die man vorher lieber unterlassen, aber dennoch ab und zu gern gehabt hätte.
If i * a > 32000 Then
Dim newVar As Integer
Else
Dim newVar As Short
End If
newVar = i * a
Ist zwar ein eher seltsames Beispiel, aber egal.. (oder?)