Programmierkurs: Delphi: Pascal: Varianten
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Varianten
[Bearbeiten] Was sind Varianten?
Varianten sind dynamische Variablentypen. Das heißt, eine Variante kann verschiedene Variablentypen (Integer, String, usw.) annehmen. Strukturierte Datentypen, wie Records, Mengen, statische Arrays, Dateien, Klassen, Klassenreferenzen und Zeiger können jedoch nicht zugewiesen werden.
[Bearbeiten] Verwendung
Varianten werden häufig eingesetzt, wenn während der Entwicklung von Programmen der Datentyp einer Variable nicht bekannt ist oder sich während der Laufzeit ändert. Varianten bieten demnach die größtmögliche Flexibilität, jedoch verbrauchen sie mehr Speicher und verhalten sich während Operationen deutlich langsamer als statische Variablentypen.
Eine Variante benötigt 16 Bytes im Speicher und besteht aus einem Typencode und einem Wert oder einem Zeiger auf einen Wert, dessen Typ durch den Code festgelegt ist. Wenn eine Variante leer ist, bekommt sie den speziellen Wert Unassigned. Der Wert Null weist auf unbekannte oder fehlende Daten hin.
Um Varianten verwenden zu können, muss man die Unit Variants in die Uses-Klausel einbinden, falls diese dort noch nicht vorhanden ist. Die Zuweisung von Varianten erfolgt wie bei allen Variablen.
procedure Zuweisung; var vExample: Variant; begin vExample := 'Hallo'; // Stringzuweisung vExample := 3.141592; // Gleitkommazuweisung vExample := 666; // Integerzuweisung end;
Beim Auslesen von Varianten wird es schon komplizierter. Zur Vereinfachung stellt Delphi die Funktion VarType zur Verfügung. Dem Befehl VarType muss die betreffende Variante mitgegeben werden. Auch wenn es sich um flexible Variablen handelt, muss man dennoch diverse Umwandlungsoperationen verwenden, wenn man z.B. eine Integer-Zahl als String ausgeben will.
procedure Auswertung(vExample: Variant); begin case VarType(vExample) of varWord: ShowMessage('Es ist ein Word: ' + IntToStr(vExample)); varString: ShowMessage('Es ist ein String: ' + vExample); varDouble: ShowMessage('Es ist ein Double: ' + FloatToStr(vExample)); end; end;
Bei der Zuweisung von Ganzzahlen verwendet Delphi immer automatisch den kleinstmöglichen Datentyp. Im oberen Beispiel weisen wir die Zahl 666 zu. Diese hat kein Vorzeichen und ist größer als ein Byte. Da der nächstgrößere Datentyp ohne Vorzeichen Word ist, erhält die Variante den Typ varWord. Über die anderen ganzzahligen und ebenfalls passenden Datentypen, wie varInteger, lässt sich diese Variable dann nicht auswerten.
Eine vollständige Liste der von Delphi mitgelieferten Rückgabewerte von VarType(vExample) erhält man in der Delphi-Hilfe.
[Bearbeiten] Probleme
Unzulässige Operationen erzeugen bei statischen Variablen während des Kompilierens Fehler und können bereinigt werden. Bei Varianten treten jedoch erst zur Laufzeit Fehler auf, was die Fehlersuche und -bereinigung erschwert.
| Inhaltsverzeichnis | Pascal: Variablen und Konstanten |