我相信同时使用nil和null的原因是,前者主要是名词,而后者主要是形容词(我在网上和在我的词典中就读过:American Heritage 1992)。
关于含义和历史,NIL是拉丁文“ nihil”的缩写,意思是“无”。
据我所知,编程语言Lisp(1958)引入了使用名称nil表示空指针的方法。
一个空指针是应该指向什么指针的值,因此不应该取消引用。在大多数情况下,指针只是内存地址。旨在包含此类指针的任何变量(即,任何位置)将始终包含某些位配置,并且任何此类配置都可以读取为内存地址。因此,通常情况下,该值nil将是程序禁止的内存区域的地址,如果程序尝试取消引用nil,则会导致某种形式的故障(可能是中断),这只能是错误。
在显式使用指针的语言中,拥有唯一的预定义标准值来发挥作用是至关重要的,因为能够测试指针是否正确指向某个内存位置非常重要。通常,在Lisp中,列表是作为连续的“ cons”对构建的,这些对包含指向列表元素的“ car”指针和指向下一个对的“ cdr”指针。在列表的最后一对中,第二个指针是nil。
这与列表的递归定义相对应,即空列表或串联到列表的列表元素。因此,没有元素的列表由表示nil。此空列表恰好是列表半身像的标识。
由于列表可以用来表示集合,因此在这种情况下,空集合也可以由表示nil。
因此nil从历史上讲是一个特殊的指针值,但后来被理解为其他更抽象的域(如列表或集合)的特殊标识值。
等于的指针nil是空指针,null是形容词而不是实体(即名词)。
单词(如形容词和名词)的协调使用与其他惯例非常一致。限定词null通常用于代数结构的零,例如monoid的标识:null元素。列表形成一个monoid,其中值nil是标识。集也是如此(尽管它们形成了具有更多特性的代数)。类似地,当整数为零时,它为null。
这些单词和其他单词的用法有很多变化,例如没有变化,这取决于编程语言的作者和特质。
两个主要内涵是,如上所述
作为标准的“未定义值”,实际上表示不存在任何可用值。
作为某个域的标识值
这表明,如Gilles在公认的答案中所做的那样,断言NIL是“ 表示“缺少值 ” 的值 ” 并不是很准确。这取决于语言及其用途。该编程语言LISP大概介绍NIL在编程术语55年前。在LISP中,是一个空列表,可以等效地指出它,它并不表示没有值。它有时被用作丢失值的占位符,尽管由于空列表是一个值,通常应避免使用它。由程序员选择的任何对象中的结构中的缺失值,不能与可接受的值混淆。NIL()它是空列表的自然表示。
即使我们在上面已经表明它们可以关联,但这两个概念却大不相同。吉尔斯的答案所列举的术语使用方式的详细分类法可能很有趣,以查看这些单词中每个单词的使用是否更偏向于一个内涵或另一个内涵。
名称只不过是定义语篇的人在给定上下文中所赋予的含义。某些用法更常见,更自然或更一致,但应始终检查定义,并确保每种情况下的含义是什么。而且,人们不应该总是期望选择具有味道或一致性的术语。