Я вважаю, що причина вживання як нуля, так і нуля полягає в тому, що перше - це насамперед іменник, а останнє - насамперед прикметник (я перевірив в Інтернеті та в своїй статті «Американська спадщина 1992»).
Щодо значення та історії, NIL - це скорочення від латинського "nihil", що означає "нічого".
Наскільки мені відомо, використання імені nil
для позначення нульового вказівника було введено з мовою програмування Lisp (1958).
Покажчик нуля є значенням покажчика , який повинен вказувати нічого, і тому їх не слід разименовивается. У більшості випадків покажчики - це просто адреси пам'яті. Будь-яка змінна (тобто будь-яке розташування), яка призначена для утримання такого вказівника, завжди буде містити певну конфігурацію бітів, і будь-яка така конфігурація може читатися як адреса пам'яті. Тому часто трапляється так, що значенням nil
буде адреса області пам’яті, забороненої програмі, тим самим спричиняючи певну форму відмови (можливо, переривання), якщо програма намагається скинути nil
, що може бути лише помилкою.
Наявність унікального заздалегідь визначеного стандартного значення для відігравання цієї ролі є важливим для мов, які чітко використовують покажчики, оскільки важливо мати можливість перевірити, чи покажчик вказує на місце розташування пам'яті чи ні. Як правило, в Ліспі список був побудований як послідовність пар "проти", що містять вказівник "автомобіль" на елемент списку та вказівник "cdr" на наступну пару. В останній парі списку був другий покажчик nil
.
Це відповідає рекурсивному визначенню списку як порожнього списку, або елементу списку, об'єднаного у список. Отже, список без елемента був представлений nil
. Цей порожній список, як відомо, є особою моноїду списку.
Оскільки списки можна використовувати для представлення наборів, порожній набір у цьому випадку також може бути представлений символом nil
.
Таким чином, nil
історично це було особливе значення вказівника, але його розуміли як особливе значення ідентичності для інших більш абстрактних областей, таких як списки або набори.
Вказівник, що дорівнює, nil
був нульовим вказівником, нуль - це прикметник, а не предметний (тобто іменник).
Узгоджене використання обох слів, як прикметника, так і іменника цілком відповідає іншій практиці. Класифікатор null часто використовується для нуля алгебраїчної структури, наприклад ідентичності моноїда: елемент null . Списки утворюють моноїд , де значенням нуль є тотожність. Те саме стосується множин (хоча вони утворюють алгебру з набагато більшими властивостями). Можна сказати аналогічно, що ціле число є нульовим, коли воно дорівнює нулю.
Існує безліч варіацій використання цих слів інших, таких як жоден, залежно від авторів та ідіосинкразії мов програмування.
Дві основні конотації є пояснено вище,
як стандартне "невизначене значення", що фактично представляє відсутність будь-якої корисної вартості.
як значення ідентичності деякого домену
Це показує, що не зовсім точно стверджувати, що NIL - це " величина, яка представляє" відсутність значення ", як це робив Гілз у прийнятій відповіді . Це залежить від мови та її використання. Мова програмування LISP ймовірно, запровадила NIL в термінології програмування 55 років тому. У LISP NIL
- це порожній список, і можна рівнозначно зазначити, ()
яке є природним поданням порожнього списку.Це не означає відсутність значення. Іноді він використовується як тримач місць для відсутніх значень, хоча цього часто уникати саме тому, що порожній список є значенням. Що означає відсутність значення в структурі в будь-якому довільному об'єкті, обраному програмістом, яке не можна переплутати з прийнятними значеннями.
Дві концепції досить різні, хоча ми вже показали, що вони можуть бути пов'язані. Можливо, буде цікавим детальний таксономічний прийом використання термінології, перерахованої Гіллесансвером, щоб побачити, чи вживання кожного з цих слів орієнтоване більше на одну конотацію чи іншу.
Імена - це не більше ніж те, що їм призначено означати в даному контексті тим, хто визначає дискурс. Деякі способи використання є більш поширеними, більш природними або більш послідовними, але завжди слід перевіряти визначення та переконатися, яке значення передбачалося у кожному контексті. І не завжди слід очікувати, що термінологія була обрана зі смаком чи послідовністю.
NULL
(для сумісності з C), так іnil
; виклик методівnil
- це не-оп. У JavaScript є якnull
(значення нічого не представляє), так іundefined
(значення навіть не встановлено).