Nun, mein Anliegen kommt aus der Erkenntnis, dass ooBasic mit den Objekten scheinbar ähnlich wie Java umgeht. Z.B.
Code: Alles auswählen
type Struktur1
a as integer
end type
Sub Main
Dim Obj1 as Struktur1
Dim Obj2 as object
Obj1.a = 100 '(1)
print "isNull(Obj1)";isNull(Obj1); " isNull(Obj2)";isNull(Obj2)
Obj2 = Obj1 ' (2)
print "Obj1.a: "; Obj1.a ;" Obj2.a: "; Obj2.a
Obj2.a = 200
print "Obj1.a: "; Obj1.a ;" Obj2.a: "; Obj2.a
end sub
zeigt, dass die 'Variable' Obj2 nach der Deklaration mit NULL versehen ist, Obj1 offenbar nicht. Bei (2) wird diese 'Referenz' auf Obj1 ausgerichtet und sämtliche Änderungen an Ob2 wirken auch auf Obj1. Wobei Obj1 und Obj2 sowieso dasselbe Objekt sind.
Dies Verhalten ist wenig anders als in Java, auch C++ kann mit solchen Referenzen funktionieren.
Allerdings hat man in Java oder C++ die beiden schönen Operatoren new und delete, die die Geburt und die Vernichtung der Objekte sicherstellen. In ooBasic gibts es auch new, oder auch entsprechende CreateUno... Funktionen, ein delete gibts meines Wissens nicht. Ich denke mal, dispose() ist kein wirklicher Ersatz, weil man dispose nicht für eigene Objekte realisieren kann.
Nun, wie dem auch sei, in Java oder C++ wird die NichtExistens eines Objektes gerne mit der Referenz NULL dokumentiert. Das macht in vielen Fällen Sinn. Der eingängigste Sinn liegt beispielsweise im Epilog eines Programms: Wenn ich mehrere Resourcen im Program geöffnet habe, aber nicht so genau weiß welche, so könnte man diese einfach mit
if isNull(Resource) then Resource.dispose()
wieder freigeben. Das klappt allerdings nicht, wenn die Resource im Prgramm schon mal geöffnet und disposed wurde, weil man scheinbar die Null nicht in die Referenz schreiben kann.
Ganz interessant ist in diesem Zusammenhang, dass eine NULL als Funktionsparameter ganz selbstverständlich akzeptiert wird:
Wenn irgendwo
SUB Funktion (Para1 AS Object)
steht, und man schreibt irgendwo anders als Funktionsaufruf
Funktion(NULL)
klappt das so, wie man sich das denkt.
Das übergebene Objekt ist dann eben Null, was in meinen Augen auch sehr viel Sinn machen kann.
Offenbar ist NULL eine 'Quasi Konstante'.
-bm