Googled, но не нашел ответа.
Есть ли что-то особенное в имени nil?
Является ли понятие nil отличным от null в других языках?
Googled, но не нашел ответа.
Есть ли что-то особенное в имени nil?
Является ли понятие nil отличным от null в других языках?
Ну, "ноль" - это традиционное название для переопределенной концепции "ничего" в Lisp и Smalltalk †. Слово "null" используется как прилагательное, означающее "пусто", как в "нулевом списке", которое равно нулю.
Между тем, "null" традиционно является значением указателя в C, что означает, что указатель не указывает на что-либо действительное. Это относится к тому, что указатель имеет нулевое значение (в том же смысле, что Lisp использует это слово), но сам по себе он считался значением.
Мац был поклонником как Smalltalk, так и Lisp, поэтому он пошел со своей терминологией. Между этими двумя терминами нет существенного различия в значении - один - только C-ish.† Собственно, "nil" существовало на гораздо большем количестве языков, чем только те. Даже Алгол-68, великий дедушка С, назвал его "ноль". Я не уверен, что C изобрел "нуль" как имя для нулевой ссылки или просто популяризировал его, но я уверен, что все современные языки, использующие этот термин, получили его от C.
Многие языки программирования имеют возможность представить отсутствие информации. Иногда вы увидите null
, иногда, nil
, а в Python - None
.
Нет универсальной разницы между nil
и null
и None
. Интересен тот факт, что существуют различия в том, как разные языки используют null
, например: на некоторых языках его можно использовать только в контексте указателя; иногда это ключевое слово; иногда это просто идентификатор; иногда это примитив; иногда это объект.
Но нет ничего, что говорит о том, что вы должны использовать nil
для обозначения этого и null
для обозначения этого.
Выбор слова, означающего ничего, зависит от разработчика языка. Мацумото предпочел nil
; это все.
FWIW, некоторые языки идут на один шаг дальше и отличают концепцию ничего от концепции, о которой мне все равно. Напомним, что JavaScript здесь:
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.
Разработчики языка могут или не могут использовать это различие на своем языке. Я никогда не видел ничего подобного для null
vs. nil
.
Я старый школьный программист. Я запрограммировал профессионально более тридцати лет назад. Прошло много программистов. Но я хотел бы указать немного старой школы, о которой не упоминалось.
Существует символ ASCII с именем null. Это двоичное значение 00000000. Это фактический символ. Мы обычно спрашивали: "нулевой символ действительно null?".
Мое предложение, которое является изменением ума для меня, заключается в том, чтобы зарезервировать слово null для нулевого символа и использовать nil, когда значение "ничего".
Исторически: мы использовали отправку пучка нулей в какое-то место, чтобы создать паузу при отправке данных.