…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. }
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