Normalerweise gibt es zwei spezielle Werte. Einige Sprachen behandeln beide, einige nur 1 und einen Fehler mit dem anderen, und einige verschmelzen die beiden. Diese zwei Werte sind Null
und Undefined
.
Undefined
würde versuchen, eine Variable zu verwenden, die flach aus nicht existiert.
Null
würde versucht, eine Variable zu verwenden, die existiert aber kein Wert.
Null
kann nützlich sein, weil es einen garantierten Wert, der angibt, dass etwas nicht in Ordnung ist, oder außerhalb der Domäne/Bandbreite möglicher Antworten. Nehmen Sie Java zum Beispiel:
Wenn Sie nicht null
, was, wenn Sie eine Suche in einem HashMap
für etwas, das nicht in der Karte vorhanden war, haben? Was würdest du zurückgeben? Wenn Sie ein Objekt zurückgeben würden, wie würden Sie dann wissen, ob dieses Objekt bedeutete, dass nichts da war oder das, was tatsächlich in der Map war. Zu den Problemumgehungen könnte das Erstellen eines eigenen Konstantenobjekts "NON_EXIST" gehören, aber das ist im Wesentlichen dasselbe wie das, was bereits null
ist. Eine andere Problemumgehung könnte das Auslösen einer Ausnahme sein. Jetzt sehen Sie sich große Auswirkungen auf die Leistung an.
Auch seine die Idee, einen garantierten zulässigen Wert zu haben, die Sie verwenden können. Es ist immer für Sie verfügbar und es ist immer unabhängig von der Menge der "echten Werte", die normalerweise von einer ausgeführten Operation zurückgegeben werden. Null
wird daher absichtlich verwendet, um etwas Besonderes zu bedeuten.
Wie bevor ich angedeutet, gibt es auch Optimierungen, die auch hier getan werden kann, weil Null
ein spezieller Wert ist. In Sprachen wie Java, wenn Sie ursprünglich ein Objekt nur durch eine Variable referenziert haben, setzen Sie diese Variable auf null
. Sie entfernen diese Referenz und erlauben dem Garbage Collector von Java, die nun nicht referenzierten Daten zu sammeln. Wenn Sie stattdessen diese Variable für immer herumstehen lassen, wird dieser Speicherbereich, der möglicherweise nie wieder verwendet wird, weiterhin Ressourcen enthalten. Dies ist ein künstliches Beispiel, aber es beweist einen Punkt und in einigen ressourcenintensiven Java-Programmen sehen Sie diese expliziten Zuweisungen zu null
.
Dies ist eine philosophisch ärgerliche Frage. – Daniel