Programmierkurs: Delphi: Pascal: Varianten

Aus Wikibooks

Wechseln zu: Navigation, Suche

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.


Arrow left.png Pascal: Records Inhaltsverzeichnis Pascal: Variablen und Konstanten Arrow right.png
Persönliche Werkzeuge