Visual Basic .NET: Literale

Betrachten wir ein einfaches Programmbeispiel.

Code:  

Dim x As Byte = 3
Console.WriteLine(x)

Ausgabe:  

x = 3

Wird ein Programm erstellt, so müssen in der entsprechenden ausführbare Datei alle Informationen enthalten sein, die das Programm zu seiner Ausführung benötigt. Der vorliegende Code enthält z.B. folgende Informationen:

  • Lege eine Variable x vom Typ Byte an.
  • Initialisiere x mit dem Wert 3.
  • Rufe die MessageBox.Show-Funktion mit dem Parameter x auf.

Uns interessiert jetzt der zweite Punkt: Wie wird der Wert 3 im Programm gespeichert? In einem Programm werden Werte, die im Quellcode direkt angegeben sind, sogenannte Literale, wie Variablen gespeichert. Das heißt, dass die 3 wie eine Variable gespeichert wird, auf die man aber im Programm nur ein einziges Mal zugreifen kann, nämlich dort, wo der Literal im eigentlichen Code drinsteht.

Wenn ein Literal im Programm eine Variable ist, kommt unweigerlich die Frage nach dem Datentyp auf. Es gibt einige Standarddatentypen: Es handelt sich hier um Integer oder Long für Ganzzahlen (Long nur dann, wenn der Wert für Integer zu groß ist), Double für Gleitkommazahlen, String für Zeichen und Zeichenketten und Boolean für Wahrheitswerte. Das heißt, dass z.B. der Literal 3 im obigen Beispiel ein Integer-Literal wäre, ein Literal „3.0“ wäre jedoch ein Double-Literal.

Aus diesen Standarddatentypen erwachsen zwei Probleme, die sich aber mit einem einfachen Mittel lösen lassen.

Problem 1: Wertebereiche

Bearbeiten

Zu dieser Problematik habe ich aus der MSDN Library folgendes Beispiel (leicht abgewandelt) entnommen.

  Code:  

Dim x As Double
x = 100000000000000000000

  Ausgabe:  

Fehler durch Überlauf

Versuchen Sie, diesen Code zu kompilieren, wird ein Fehler in der 2. Zeile angezeigt. Das erscheint verwunderlich, da Double Werte bis etwa 10^208 akzeptiert. Doch ist der Literal ein Long-Literal, da es sich um eine Ganzzahl handelt. Der Long-Datentyp akzeptiert nur Werte bis 9223372036854775807, was etwa ein Hundertstel des obigen Wertes ist. Das Problem lässt sich wie folgt umgehen.

  Code:  

Dim x As Double
x = 100000000000000000000.0

  Ausgabe:  

x = 100000000000000000000

Der Wert des Literals bleibt der gleiche, doch handelt es sich jetzt um einen Double-Literal, der den entsprechenden Wert ohne Probleme akzeptiert.

Problem 2: Umwandlungen

Bearbeiten

  Code:  

Dim a As Long = 2

In diesem Code wird das erste Problem nicht auftauchen, denn sowohl Long, der Typ der Variable, als auch Integer, der Typ des Literals, akzeptieren den Wert 2. Es bleibt aber noch ein Problem: Wie kann man einen Integer-Wert in einer Long-Variable speichern? Zum Glück (und zum Unglück) wandelt Visual Basic in solchen Fällen Werte eines Datentyps in Werte eines anderen Wertes um. (Natürlich mit Grenzen, z.B. kann eine Zeichenkette nicht immer in eine Zahl umgewandelt werden.) Doch diese Umwandlung kostet Zeit, was vor allem bei zeitkritischen Anwendungen oder sehr häufigen Wertzuweisungen von Bedeutung ist. Man kann die Umwandlungen umgehen, indem man die Typen von Literalen explizit angibt. Im folgenden Beispiel sehen Sie einen Long-Literal.

  Code:  

Dim a As Long = 2L

Durch das große L direkt nach der Zahl wird dem Compiler mitgeteilt, dass es sich bei diesem Literal um einen Long-Literal handelt. So wird die zeitraubende Umwandlung verhindert, denn ein Long-Wert muss zur Speicherung in einer Long-Variable nicht umgewandelt werden.

Wie man sieht, muss man nur einen bestimmten Buchstaben an den Literal anhängen, um den Typ festzulegen. Die folgende Tabelle enthält alle möglichen Suffixe (lat. für Endungen). Beachten Sie, dass man statt dem angegebenen Großbuchstaben auch die entsprechenden Kleinbuchstaben verwendet werden können. Neben Buchstaben sind manchmal auch Symbole möglich, die ein Relikt aus BASIC-Zeiten darstellen. „5!“ ist also ein Single-Literal.

Datentyp Buchstabensuffix Symbolsuffix
Short S
Integer I %
Long L &
UShort US
UInteger UI
ULong UL
Single F !
Double R #
Char C

Bei Char muss das C nach den Anführungszeichen gesetzt werden. Im folgenden sind einige Literale und die entsprechenden Typen beispielhaft aufgelistet:

Literal Datentyp
5F Single
25ul ULong
"f"C Char