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 ' zur MsgBox hab ich auch was geschrieben!!


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?)