Seite 1 von 1
Wann object, wann variant?
Verfasst: Sa, 03.01.2009 18:55
von steffn
Halloho,
Ich habe irgendwann, irgendwo mal gelesen, dass man etwas mit 'object' deklarieren soll und anderes mit 'variant'. Ich weiß aber nicht mehr wo und was das war.
Gelernt habe ich: immer 'option explicit', 'variant' ist böse, 'variant' wird nicht benutzt.
Ich sehe "variant" aber so oft in fremden Macros, dass ich doch gerne Bescheid wüsste.
Re: Wann object, wann variant?
Verfasst: So, 04.01.2009 16:25
von ykcim
Die Deklaration als Variant hat seine Tücken.
a. Jede Variable ohne Festlegung des Typs wird als Variant deklariert.
b. Jede Variable die in einer Reihe festgelegt wird, wird zwischen den Kommas ohne Deklaration als Variant interpretiert:
Dim i1,i2 as integer
führt zu i1 = Variant und i2 = integer und nicht zu: i1 und i2 = integer !
c: Jede Variable des Type Variant kann alles aufnehmen: Objekte, Strings und Zahlen.
d. Die Deklaration als Variant kann speziell bei Zahlen-Variablen, wenn dann mit anders deklarierten Variablen gearbeitet wird, Fehler verursachen.
e. Dadurch das eine Variant-Variable alles sein kann, ist eine Fehlersuche nicht gerade einfach.
Warum auch immer irgendwer den Typ Variant empfiehlt ist mir nicht klar. Ich verwende ihn nicht!
mfg
Michael
Re: Wann object, wann variant?
Verfasst: So, 04.01.2009 20:12
von Stephan
Gelernt habe ich: immer 'option explicit', 'variant' ist böse, 'variant' wird nicht benutzt.
Ich sehe "variant" aber so oft in fremden Macros, dass ich doch gerne Bescheid wüsste.
Variant ist nicht eigentlich 'böse', es ist nur häufig nicht sinnvoll ihn einzusetzen, zum Einen wegen der Gründe die Michael nennt, zum Anderen beispielsweise auch um ggf. Speicherplatz zu sparen.
Da Variant alle anderen Typen beinhaltet wird natürlich immer soviel Platz reserviert wie der speicherplatzintensivste Typ benötigt (ich kann jetzt aus dem Hut garnicht sagen wieviel Variant minimal reserviert (16 Byte?)), nur benötigt beispielsweise ein Integer 2 Byte und ein Long 4 Byte, wenn Du also statt eines nötigen Integer ein Variant verwendest verschwendest Du schon bei diesem Vergleich zumindestens 2 Byte).
Wenn Deiner Beobachtung nach Variant trotzdem häufig eingesetzt wird, so wohl meist weil bei der Deklaration von Variablen nicht explizit ein Typ angegeben wird und sie dann, wie Michael schon feststellt, automatisch Variant sind. Das ist dann im Prinzip eher nachlässiger Programmierstil.
Warum auch immer irgendwer den Typ Variant empfiehlt ist mir nicht klar.
Du empfiehlst ihn beispielsweise im Zusammenhang mit der Benutzung von Calc-Tabellenfunktionen innerhalb von Makros:
http://www.starbasicfaq.de/WiekannmanFu ... nden..html
Es lassen sich aber sicher noch eine Reihe anderer Anwendungsfälle finden. Ich verwende z.B. häufiger Konstrukte der Form:
was meines Wissens durch die Array-Funktion automatisch vom Typ Variant ist
(selbst wenn man vorher versucht x anders zu deklarieren und ungeachtet der Tatsache das ich hier nur Strings übergebe)
Gruß
Stephan
Re: Wann object, wann variant?
Verfasst: Di, 06.01.2009 12:56
von ykcim
Warum auch immer irgendwer den Typ Variant empfiehlt ist mir nicht klar.
Du empfiehlst ihn beispielsweise im Zusammenhang mit der Benutzung von Calc-Tabellenfunktionen innerhalb von Makros:
http://www.starbasicfaq.de/WiekannmanFu ... nden..html
Es lassen sich aber sicher noch eine Reihe anderer Anwendungsfälle finden.
Meine Meinung zu Variant bezog sich auf die allgemeine Äußerung Variant statt klare Typen zu verwenden.
In meiner FAQ gibt es noch eine Stelle wo ich Variant verwende.

Aber in beiden Fällen in einem klaren Zusammenhang und nicht pauschal.
mfg
Michael