代码之家  ›  专栏  ›  技术社区  ›  yazz.com

所有编程语言是否都有一个明确的零、空或未定义的概念?

  •  2
  • yazz.com  · 技术社区  · 14 年前

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

    见:

    Is this API too simple?

    关于键值存储api的讨论

    5 回复  |  直到 13 年前
        1
  •  4
  •   Erich Kitzmueller    14 年前

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

        2
  •  9
  •   Don Stewart    14 年前

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

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

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

    • 你所关心的类型的所有值

    • 额外的价值,没什么。

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

    data Maybe a = Just a | Nothing
    

    奇怪的是,相对较少的语言支持sum类型,因此它们将它们编码为产品(一对标签just或nothing,以及值本身)或重载该类型的一个成员(例如,-1或0变成nothing)。

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

        3
  •  3
  •   Kobi    14 年前

    如果不是,那就由语言来提供另一种约定,比如 isAgeNull 功能。你不该担心的。
    所有主要的数据库都有空值(甚至是空值的类型),它们可以很好地处理不同的语言。
    你还应该记住一个物体 空指针 还有一个数据库 空值

        4
  •  2
  •   mjv    14 年前

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

    我建议您简单地处理“null/nothing/nil”,就好像这只是一个特定的“类型”。
    换言之,正如您可能会发现为所说的浮点算术值提供支持是很方便的一样(尽管并非所有语言都支持这些值),如果您发现空值很有用,则可以将其包含在数据模型/api中,并简单地将责任推给特定的实现将空值转换为任何合适的值(比如说零或空字符串或其他)的api,底层语言将不支持空值概念(或者,如果不希望在特定语言中处理空值,则抛出异常)。

        5
  •  1
  •   Xorlev    14 年前

    我想我明白了。尽管我会这么说 敲木头 大多数与odbc接口一起使用的语言都有空的概念。不过,从类似于c的语言中获得的信息越多,您的里程可能就越大。