====== unimplemented ======
...ist ähnlich Null ein besonderer Marker und als Rückgabewert gedacht, wenn Funktionen noch nicht implementiert sind, um sich von false bzw. null zu unterscheiden, bzw. im Quelltext suchbar zu sein.
getValue is code( a, b, c is int ) as bool
{
if( a == 0 )
return false; // false meint false
if( b == 1 )
return true;
return unimplemented; // liefert false, aber hier muss noch was gemacht werden.
}
===== Eigene Implementationen von unimplemented =====
Bei den eingebauten Datentypen entspricht ''unimplemented'' dem Wert ''null''. Wie null kann ''unimplemented'' aber spezialisiert werden:
func is code as string : return unimplemented;
print func();
liefert: ""
enhance string
{
operator unimplemented() override :
{
static temp : "unimplemented";
return temp;
};
};
func is code as string : return unimplemented;
print func();
liefert: "unimplemented"
Die Default-Implementierung ist
operator unimplemented() : null;
Hier gilt:
object::null == object::unimplemented => true
ptr(object::null) == ptr(object::unimplemented) => true
Für einfache Objekte, wie string sollte es zwei "Empty-Objects" geben, um zwischen null und unimplemented zu unterscheiden
string::null == string::unimplemented => true
ptr(string::null) == ptr(string::unimplemented) => false