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.
Wann object, wann variant?
Moderator: Moderatoren
Wann object, wann variant?
oo4.1.2 in winxp pro mit sp3
Re: Wann object, wann variant?
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
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?
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.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.
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.
Du empfiehlst ihn beispielsweise im Zusammenhang mit der Benutzung von Calc-Tabellenfunktionen innerhalb von Makros:Warum auch immer irgendwer den Typ Variant empfiehlt ist mir nicht klar.
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:
Code: Alles auswählen
x = Array("abc", "def", "ghi")
(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?
Meine Meinung zu Variant bezog sich auf die allgemeine Äußerung Variant statt klare Typen zu verwenden.
Du empfiehlst ihn beispielsweise im Zusammenhang mit der Benutzung von Calc-Tabellenfunktionen innerhalb von Makros:Warum auch immer irgendwer den Typ Variant empfiehlt ist mir nicht klar.
http://www.starbasicfaq.de/WiekannmanFu ... nden..html
Es lassen sich aber sicher noch eine Reihe anderer Anwendungsfälle finden.
In meiner FAQ gibt es noch eine Stelle wo ich Variant verwende.

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de