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