3.2 Variablen
 
Herkömmliche Programmiersprachen, dazu zählt auch VB 6, unterscheiden zwischen zwei Arten von Variablen. Da gibt es einerseits die so genannten primitiven Datentypen wie etwa String, Integer, Boolean usw. Andererseits gibt es die komplexen Datentypen, wie etwa die Klassen, von denen sich einzelne Objekte erstellen lassen. Diese Unterscheidung gibt es in VB.NET nicht mehr. In VB.NET ist alles ein Objekt. Auch Variablen der so genannten primitiven Datentypen werden als Objekt gespeichert und können als solche verarbeitet werden. Auf den ersten Blick fällt das aber gar nicht auf. Erst wenn man mit VB.NET arbeitet, lernt man allmählich die Vorzüge dieses Systems kennen.
3.2.1 Bezeichner
 
Die Namen von Variablen, Konstanten, Klassen, Methoden etc. müssen mit einem alphabetischen Zeichen oder einem Unterstrich beginnen. Nicht erlaubt sind Zahlen als erstes Zeichen. VB.NET unterscheidet bei Bezeichnern nicht zwischen Groß- und Kleinschreibung. Die alte VB-Tradition, dass man den Datentyp einer Variablen mit einem Typzeichen am Ende des Variablennamens angeben kann, kennt auch VB.NET.
Tipp Diese Typzeichen sollten Sie auch dann kennen, wenn Sie diese veraltete Konvention nicht verwenden, damit Sie nicht versehentlich eine Variable mit einem falschen Datentyp erstellen. Diese Typzeichen sind:
Integer %
Long &
Decimal @
Single !
Double #
String $
|
Die folgenden Zeilen deklarieren beispielsweise eine Variable vom Typ Single und weisen der Variablen einen Wert zu. Nach der Deklaration kann das Typzeichen am Ende des Variablennamens im Code weiterverwendet werden. Es kann aber auch entfallen.
Dim myZahl!
myZahl! = 3.4
myZahl = 0.5
3.2.2 VB.NET-Datentypen
 
VB.NET-Datentyp
|
Common-Language-
Runtime-Typstruktur
|
Wertbereich
|
Boolean
|
System.Boolean
|
True oder False
|
Byte
|
System.Byte
|
0 bis 255 (ohne Vorzeichen)
|
Char
|
System.Char
|
0 bis 65. 535 (ohne Vorzeichen)
|
Date
|
System.DateTime
|
0:00:00, 1. Januar 0001 bis 11:59:59 PM (USA), 31. Dezember 9999
|
Decimal
|
System.Decimal
|
0 bis
+/– 79.228.162.514.264.337.593.543.950.335 ohne Dezimaltrennzeichen; 0 bis
+/–7,9228162514264337593543950335 mit 28 Stellen rechts vom Dezimalkomma; die kleinste Zahl ungleich 0 lautet
+/–0,0000000000000000000000000001
(+/–1E–28)
|
Double
(Gleitkommawert mit doppelter Genauigkeit)
|
System.Double
|
–1,79769313486231570E+308 bis
–4,94065645841246544E–324 für negative Werte; 4,94065645841246544E–324 bis 1,79769313486231570E+308 für positive Werte
|
Integer
|
System.Int32
|
–2.147.483.648 bis 2.147.483.647
|
Long
(lange ganze Zahl)
|
System.Int64
|
–9.223.372.036.854.775. 808 bis 9.223.372.036.854.775.807
|
Object
|
System.Object (Klasse)
|
In einer Variablen vom Typ Object kann jeder beliebige Typ gespeichert werden.
|
Short
|
System.Int16
|
–32.768 bis 32.767
|
Single
(Gleitkommawert mit einfacher Genauigkeit)
|
System.Single
|
–3,4028235E+38 bis –1,401298E–45 für negative Werte; 1,401298E–45 bis 3,4028235E+38 für positive Werte
|
String
(variable Länge)
|
System.String (Klasse)
|
0 bis ungefähr 2 Milliarden Unicode–Zeichen
|
Tabelle 3.1 Datentypen von VB.NET
Tabelle 3.1 listet die in VB.NET verfügbaren Datentypen auf. Mit der Anweisung Dim deklarieren Sie eine Variable des entsprechenden Typs.
Dim i As Integer ' Legt die Integer-Variable i an
Dim j As Integer = 42 ' Integer-Variable mit Startwert
Dim a, b, c As Integer ' drei Integer-Variablen
Dim o As Object ' Variable vom Typ "Object"
Dim x ' Variable vom Typ "Object" oder
' bei Strict="True" eine Fehlermeldung
Wenn bei der Deklaration einer Variablen kein Datentyp angegeben wird, erstellt VB.NET eine Variable vom Typ Object. Das funktioniert aber nur dann, wenn Sie Option Strict auf False stellen, sonst gibt VB.NET eine Fehlermeldung aus.
Die Tatsache, dass auch Variablen der so genannten primitiven Datentypen Instanzen von Klassen sind, ermöglicht zahlreiche interessante Anwendungen. Dort, wo im klassischen Visual Basic eigene Befehle nötig sind, können Sie in VB.NET die Methoden und Eigenschaften der jeweiligen Klasse verwenden.
System.String
Hier einige Beispiele, wie Sie die Methoden und Eigenschaften der Klasse System.String einsetzen können.
<!-- vb_02.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
Dim t As String
Dim a As String
t = "Test"
a = t & " ist " & t.Length & " Zeichen lang. "
a &= "Das erste Zeichen ist ein " & t.Chars(0)
ausgabe.innerText = a
End Sub
</script>
<html><head><title>
Einstieg in VB.NET
</title></head>
<body>
<h3>Einstieg in VB.NET</h3>
<p id="ausgabe" runat="server"></p>
</body></html>
Abbildung 3.1 zeigt die Ausgabe des Browsers.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 3.1 Bei VB.NET sind alle Variablen Objekte, die über eigene Methoden und Eigenschaften verfügen.
Zunächst deklarieren Sie eine Variable vom Typ String und weisen der Variablen einen Wert zu:
Dim t As String
t = "Test"
Mit t.Length können Sie die Länge des Strings ermitteln und mit t.Chars(0) bringen Sie das erste Zeichen des Strings in Erfahrung. Die Klasse String stellt zahlreiche weitere Eigenschaften und Methoden dieser Art zur Verfügung.
|
Vergleiche führen Sie mit CompareTo, Equals, StartsWith, EndsWith durch. |
|
Mit CopyTo, Split und Substring können Sie den String auswerten und weiterverarbeiten. |
|
Für Suchvorgänge stehen IndexOf, IndexOfAny, LastIndexOf, LastIndex OfAny zur Verfügung. |
|
Bearbeitungen führen Sie mit Insert, PadLeft, PadRight, Remove, Replace, ToLower, ToUpper, Trim, TrimStart und TrimEnd durch. |
|
Außerdem bietet die Klasse System.String die statischen Methoden Compare, CompareOrdinal, Concat, Copy, Format und Join an. Diese können Sie unabhängig von einer konkreten String-Variablen einsetzen. |
Da die einzelnen Methoden oft mehrfach überladen sind, entnehmen Sie die jeweiligen Aufrufdetails am besten der Dokumentation. Eine genaue Auflistung aller Optionen würde den Rahmen dieses Kapitels sprengen.
Für String-Verkettungen können Sie in VB.NET den Operator &= verwenden: Der Ausdruck s = s & "A" ist äquivalent zu s &= "A".
Dim s As String = ""
Dim i As Integer
For i = 1 to 4
s &= "A"
Next
ausgabe.innerText = s ' "AAAA"
System.Int32 und andere Zahlentypen
Die Datentypen für die Darstellung von Zahlen haben weniger Eigenschaften und Methoden als der Typ String. Als Beispiel soll der häufig verwendete Typ System.Int32 vorgestellt werden, der dem VB.NET-Typ Integer entspricht.
Die öffentlichen statischen Felder MaxValue und MinValue geben jeweils den größten und kleinsten zulässigen Wert aus. ToString konvertiert die Zahl in einen String. Die statische Methode Parse lässt sich beispielsweise verwenden, um eine Benutzereingabe, die als String vorliegt, in einen Integer-Wert zu konvertieren. Wenn die Konvertierung nicht möglich ist, generiert VB.NET eine Ausnahme. CompareTo und Equals führen Vergleiche durch.
Achtung Der folgende Code löst einen Fehler aus.
Dim a As Short = 1000
Dim b As Short = 40
Dim c As Integer
c = a * b
|
Die Fehlermeldung lautet: Die arithmetische Operation hat einen Überlauf verursacht. Wenn man die Berechnung nachvollzieht, ist aber kein Überlauf zu erkennen. Das Ergebnis soll in der Integer-Variablen c abgelegt werden, und der VB.NET-Typ Integer reicht bis zwei Milliarden. Der Fehler tritt auf, weil der Compiler beim Berechnen temporäre Variablen anlegt, die in diesem Fall ebenfalls vom Typ Short sind. Genauer gesagt verwendet der Compiler stets den größten Typ, der innerhalb eines Ausdrucks verwendet wird, und das ist hier Short. Short reicht aber nur bis 32.767.
Um diesen Fehler zu vermeiden, können Sie die Multiplikation beispielsweise so formulieren:
c = a * CInt(b)
Indem Sie b zunächst in den Typ Integer umwandeln, verwendet VB.NET temporäre Variablen vom Typ Integer, bei denen es nicht zum einem Überlauf kommt.
Tabelle 3.2 nennt die verfügbaren mathematischen Operatoren.
Operator
|
Beschreibung
|
^
|
Potenz, 2^10 ergibt 1024
|
*
|
Multiplikation
|
/
|
Dividiert zwei Zahlen. Gibt ein Gleitkomma-Ergebnis zurück
|
\
|
Dividiert zwei Zahlen und gibt nur den ganzzahligen Teil des Ergebnisses zurück. 11\2 ergibt 5.
|
Mod
|
Modulo-Berechnung. 11 Mod 2 ergibt 1 (5 Rest 1).
|
+
|
Addition, kann auch Strings verketten
|
-
|
Subtraktion, kann auch als Vorzeichen verwendet werden
|
Tabelle 3.2 Mathematische Operatoren
Tipp Die .NET-Klasse System.Math bietet weitere Funktionen für trigonometrische Berechnungen und für Rundungen.
|
System.DateTime
Der VB.NET-Datentyp Date entspricht dem CLR-Typ System.DateTime. Er speichert ein Datum und eine Uhrzeit.
Dim d As Date
d = #12/31/2004#
ausgabe.innerText = d.toString()
' Die Ausgabe im Browser lautet: 31.12.2004 00:00:00
Ein Datumsliteral weisen Sie in Doppelkreuzen im amerikanischen Format MM/TT/JJJJ zu. Wenn Sie ein Datum ausgeben, indem Sie es beispielsweise mit toString() in einen String umwandeln, berücksichtigt .NET stets die kulturellen Einstellungen. In einem deutschen Browser erscheint also beispielsweise die Angabe: 31.12.2004 00:00:00
Eine DateTime-Variable deckt die Zeit vom 1. Januar 0001 bis zum 31.12.9999 ab. Das dürfte für viele Aufgaben ausreichen.
Ähnlich wie der Typ String verfügt auch der Typ DateTime über zahlreiche Eigenschaften und Methoden, die die Arbeit mit Daten dieses Typs erleichtern.
|
Die einzelnen Bestandteile einer DateTime-Variablen rufen Sie mit den Eigenschaften Date, Day, DayOfWeek, DayOfYear, Hour, Millisecond, Minute, Month, Second, Ticks, TimeOfDay und Year ab. |
|
Die statischen Eigenschaft Now, Today und UtcNow nennen das aktuelle Datum und die Uhrzeit in diversen Ausgabevarianten. |
|
Mit einer langen Liste von Methoden erleichtert .NET das Rechnen mit Datumsangaben erheblich. Mit Add, AddDays, AddHours, AddMilliseconds, AddMinutes, AddMonths, AddSeconds, AddTicks und AddYears können Sie Zeitspannen hinzuaddieren und mit Subtract subtrahieren. Tipp am Rande: Wenn Sie einen negativen Wert addieren, dann wird auch subtrahiert. |
|
Datumsvergleiche führen CompareTo und Equals durch. |
|
Ausgaben in diverse Formate führen ToFileTime, ToLocalTime, ToLongDateString, ToLongTimeString, ToOADate, ToShortDateString, ToShortTimeString, ToString und ToUniversalTime durch. |
|
Die DateTime-Klasse stellt außerdem die statischen Methoden Compare, DaysInMonth, FromFileTime, FromOADate, IsLeapYear, Parse und ParseExact zur Verfügung. |
Beim Hantieren mit Zeit- und Datumsangaben ist außerdem der Typ TimeSpan sehr nützlich. In TimeSpan-Objekten können Sie Zeitintervalle definieren. Auf diese Weise können Sie beispielsweise zu einem gegebenen Datum die Zeitspanne von 30 Tagen hinzuaddieren und erhalten das gewünschte Datum. Dabei müssen Sie sich nicht selbst um die unregelmäßige Anzahl von Tagen der einzelnen Monate oder um Schaltjahre kümmern. Das erledigt .NET für Sie. Wenn Sie dem TimeSpan-Konstruktor drei Integer-Werte als Parameter übergeben, betrachtet er die Werte als Stunden, Minuten und Sekunden. Bei vier Parametern nimmt er Tage, Stunden, Minuten und Sekunden entgegen.
Auch die TimeSpan-Struktur verfügt ähnlich wie die DateTime-Klasse über eine lange Liste an Eigenschaften und Methoden, die Sie sich in der Dokumentation näher ansehen sollten, wenn Sie mit Datumsangaben hantieren.
vb_03.aspx enthält einige Zeilen Beispielcode, die den Umgang mit Datumsangaben demonstrieren.
Dim d As Date
Dim x As Date
Dim ts As TimeSpan
d = now
ausgabe.innerHTML = "ToString: "
ausgabe.innerHTML &= d.ToString ' 25.09.2002 15:27:35
ausgabe.innerHTML &= "<br>ToShortDateString: "
ausgabe.innerHTML &= d.ToShortDateString ' 25.09.2002
ausgabe.innerHTML &= "<br>ToShortTimeString: "
ausgabe.innerHTML &= d.ToShortTimeString ' 15:27
x = d.AddDays(30)
ausgabe.innerHTML &= "<br>AddDays(30): "
ausgabe.innerHTML &= x.ToShortDateString ' 25.10.2002
' 3 Tage, 4 Stunden, 5 Minuten, 6 Sekunden
ts = New TimeSpan (3,4,5,6)
x = d.add (ts)
ausgabe.innerHTML &= "<br>plus 3 Tage, 4h 5m 6s: "
ausgabe.innerHTML &= x.toString ' 28.09.2002 19:32:41
|