所有编程语言都有明确的NIL,null或undefined概念吗?

时间:2010-02-24 07:33:12

标签: api programming-languages types null type-systems

我正在用许多不同的语言编写一个键值存储API(比如ODBC,只是接口,而不是底层存储),虽然我不想在语言之间音译API,但我不希望存储一个Java中的值为“null”,然后使用另一种不支持null概念的语言读取它。我不确定我是否这么好解释,但这是我的第一次尝试:)

见:

Is this API too simple?

关于键值存储API的讨论

5 个答案:

答案 0 :(得分:9)

这是一个类型系统问题,所以任何回答“0”的人都会忽略这一点。

您所说的是总和类型(选中“类型和编程语言”)。

即具有n + 1居民的类型。也就是说,其元素是:

  • 您关注的所有类型的值

OR

  • 额外的价值,没什么。

这很容易描述为代数数据类型,例如在Haskell

data Maybe a = Just a | Nothing

奇怪的是,相对较少的语言支持和类型,因此它们将它们编码为产品(一对标签Just或Nothing,以及值本身)或者通过重载其中一个类型的居民(例如-1或0变为为Nothing)。

此类型通常称为“可能”或“可选”。

答案 1 :(得分:4)

没有。我能想到的所有无指针的语言都没有这样的概念。例如,经典的Basic(就像80年代家用电脑中使用的那样)没有这样的概念。我不认为Cobol也有它。

答案 2 :(得分:3)

如果没有,则由语言提供替代约定,如isAgeNull函数。它不应该与你有关 所有主要数据库都有空值(甚至是null类型),并且它们在不同语言中表现良好 您还应该记住,对象空指针与数据库空值之间存在差异。

答案 3 :(得分:2)

不,并非所有语言都支持“null / nil / Nothing”概念;在某些情况下,这种支持仅限于一个简单的约定,其中未知/未定义的值由特定值表示。

我建议您只需处理“NULL / Nothing / nil”,就好像这只是一个特殊的“类型” 换句话说,就像您可能会发现为浮点算术值提供支持一样方便(即使并非所有语言都支持这些),如果您发现NULL很有用,您可以将它包含在您的数据模型/ API中,并简单地放入API的特定实现的责任是将NULL转换为任何适当的值(比如零或空字符串或其他),基础语言不支持NULL概念(或者如果不希望处理null则抛出异常)特定语言的价值观。)

答案 4 :(得分:1)

我想我明白了。虽然我会说在木头上敲击我将使用与ODBC接口一起使用的大多数语言将具有NULL的概念。你从C语言中得到的越多,你的里程就越多。