2014-03-01 7 views
10

Google hat gegoogelt, aber keine Antwort gefunden.Warum verwendet Ruby null, um das Nullobjekt zu benennen?

Gibt es etwas Besonderes an dem Namen nil?

Ist das Konzept von Null in anderen Sprachen von Null verschieden?

+1

Nil bedeutet nichts/nicht vorhanden. Frag Matz. Es ist nicht anders. –

+2

Nur eine Vermutung: Ruby ist sehr lisp-like und 'nil' ist ein Wert in Lisp. Es ist schon sehr lange in vielen lisp-Dialekten und auch Pascal. Im Vergleich dazu kann "null" die "neuere Idee" sein. – Gene

Antwort

14

Nun, "Null" ist der traditionelle Name für das verdinglichte Konzept von "nichts" in Lisp und Smalltalk †. Das Wort "null" wird als ein Adjektiv verwendet, das "leer" bedeutet, wie in der "Nullliste", die null ist.

In der Zwischenzeit ist "Null" traditionell ein Zeigerwert in C, der anzeigt, dass der Zeiger nicht auf irgendeinen gültigen Wert zeigt. Es bezieht sich auf die Tatsache, dass der Zeiger Null ist (in dem Sinne, dass Lisp das Wort verwendet), aber es wurde als ein Wert für sich betrachtet.

Matz war ein Fan von Smalltalk und Lisp, also ging er mit ihrer Terminologie. Es gibt nicht wirklich einen wichtigen Bedeutungsunterschied zwischen den beiden Begriffen - einer ist nur C-ish.

Eigentlich "Nil" existiert in viel mehr Sprachen als nur diese. Sogar Algol-68, der Urgroßvater von C, nannte es "Nil". Ich bin mir nicht sicher, ob C erfunden „null“ als Name für die NULL-Verweis oder popularisiert es einfach, aber ich bin mir ziemlich sicher, dass alle modernen Sprachen diesen Begriff verwendet habe es von C.

3

Viele Programmiersprachen haben eine Möglichkeit, das Fehlen von Informationen darzustellen. Manchmal sehen Sie null, manchmal nil, und in Python haben wir None.

Es gibt keinen universellen Unterschied zwischen nil und null und None. Interessant ist die Tatsache, dass es Unterschiede in der Art gibt, wie verschiedene Sprachen beispielsweise null verwenden: In einigen Sprachen kann es nur in einem Zeigerkontext verwendet werden; manchmal ist es ein Schlüsselwort; manchmal ist es nur eine Kennung; manchmal ist es ein Primitiv; manchmal ist es ein Objekt.

Aber es gibt nichts, das besagt, dass Sie nil verwenden müssen, um dies zu meinen und null, dass zu bedeuten.

Die Wahl des Wortes, um nichts zu sagen, liegt beim Sprachenentwickler. Matsumoto bevorzugt nil; das ist alles.

FWIW, gehen einige Sprachen einen Schritt weiter und unterscheiden das Konzept von nichts aus dem Konzept von mir egal. JavaScript kommt hier in den Sinn:

var supervisor = null;  // I definitely do NOT have a supervisor. 

var supervisor = undefined; // I may or may not have supervisor. I may or may not 
          // even know if I do. Or it is not relevant. Or it is 
          // none of your business. 

Sprachdesigner können oder dürfen nicht entscheiden, diese Unterscheidung in ihrer Sprache zu verwenden. Ich habe noch nie so etwas für null vs. nil gesehen.

1

Ich bin ein Programmierer der alten Schule. Ich programmierte professionell vor über dreißig Jahren. Eine Menge Programmierung hat mich überholt. Ich möchte jedoch auf ein wenig alte Schule hinweisen, die nicht erwähnt wurde.

Es gibt ein ASCII-Zeichen namens null. Es ist Binärwert ist 00000000. Es ist ein tatsächliches Zeichen. Wir haben immer gefragt: "Ist das Nullzeichen wirklich null?".

Mein Vorschlag, der eine Änderung des Geistes für mich ist, ist, das Wort null für das Nullzeichen zu reservieren und nil zu verwenden, wenn "nichts" bedeutet.

Historisch: Wir haben eine Reihe von Nullen an eine bestimmte Stelle gesendet, um beim Senden von Daten eine Pause zu erzeugen.

Verwandte Themen