Ich arbeite mit Code, bei dem Daten in solchen Hashtable / Dictionary / Associative-Array-ähnlichen Strukturen gespeichert / ausgetauscht werden
{
'alpha': None,
'bravo': '',
# 'charlie' is not given
}
Es gibt nicht viel Standardisierung, welches Feld "gegeben" ist und wenn es gegeben ist, wenn es als Keine / Null / Null oder eine leere Zeichenfolge angegeben werden kann. Infolgedessen ist der Code mit Überprüfungen wie if hasattr(obj, 'alpha')
und Standard-Fallbacks übersät .
Gibt es einen Namen oder eine umgangssprachliche Bezeichnung für diese Art von (imho) Anti-Muster?
AKTUALISIEREN:
es scheint, derzeit gibt es keinen Namen, daher würde ich gerne Vorschläge hören. Derzeit haben wir diese:
- Incorporeal Horde (Credits an psr)
architecture
anti-patterns
keppla
quelle
quelle
Antworten:
Ich glaube nicht, dass es einen solchen Namen gibt (ich habe nachgesehen, aber wie kann man natürlich einen fehlenden Namen finden)?
Ich schlage den Namen "Incorporeal Horde" vor, obwohl ich ihn auf die vollständige Sammlung von null oder entarteten Objekten anwenden würde - Sammlungen mit der Größe Null, null, undefiniert, nichts, keine, NAN (wohl eine andere Art von Randfall), DBNull, ungültige, leere Zeichenfolge (möglicherweise ein Sonderfall für leere Sammlungen), fehlende Wörterbucheinträge usw.
Und ich würde es nicht als Anti-Pattern an sich bezeichnen, sondern als Problem in der Softwareentwicklung, insbesondere in dem Fall, in dem Ihre Programmierumgebung erfordert, dass Sie für viele dieser Fälle separaten Code schreiben.
Entschuldigung für eine ziemlich nicht informative Antwort, aber ich denke, es ist das Beste, was getan werden kann. Wenn die Welt aufgrund Ihrer Frage einen Namen annimmt, kann dies zu einer richtigen Antwort werden.
quelle
In F # wird dies über einen Optionstyp bereitgestellt (ähnlich wie in früheren Sprachen derselben Familie). Ich habe das gleiche Konzept in einem C # -Projekt verwendet, in dem ich eine Regel habe, nach der ich versuche, niemals null von einer Funktion zurückzugeben, aber ich
Option<T>
gebe das von diesem Typ zurück, bei dem die Möglichkeit eines None-Werts besteht. Auf diese Weise weiß der aufrufende Code, dass er diese Möglichkeit im Rückgabewert behandeln muss.Ich würde es vorziehen, nicht nullbare Referenztypen zu haben, genau wie wir jetzt nullbare Werttypen haben, aber das ist eine andere Geschichte.
quelle
In JavaScript wird dies als
undefined
eindeutiger Sentinel-Wert bezeichnet, der sich von unterscheidetnull
.Sie erhalten
undefined
entweder durch Auswerten der globalen Variablenundefined
oder einer Eigenschaft eines Objekts, das nicht definiert ist, oder durch Auswerten einer Anweisung, die keinen Wert zurückgibt, z. B. Aufrufe von Funktionen, die nichts zurückgeben, oder einen Block oder eine Variablendeklaration (obwohl diese beiden keine gültigen Ausdrücke sind, werden Sie diese nur in einer JavaScript-REPL finden).Wenn der
undefined
Wert gezwungenObject
wirdnull
, ein zu sein , wird er , aber es ist nicht sonull
.Hier ist eine kleine Illustration:
Ich denke, es ist vernünftig, undefinierte Werte (im Gegensatz zu als definiert definierten Werten
null
) als undefiniert zu bezeichnen, wenn dies Ihre Frage ist. Die Verwendung eines eindeutigen Sentinel-Werts zur Übermittlung des Fehlens eines definierten Werts ist eine praktikable Lösung für dynamische Sprachen, obwohl sie häufig nur unzureichend verstanden wird.quelle