gpt4 book ai didi

language-agnostic - 是否有没有 "null"的语言?

转载 作者:行者123 更新时间:2023-12-03 13:24:29 25 4
gpt4 key购买 nike

有很多人认为特殊值的概念null (因为它在 C、Java、C#、Perl、Javascript、SQL 等语言中使用)是一个坏主意。 SO和P.SE上有几个关于这个的问题,比如Best explanation for languages without nullAre null references really a bad thing? .

但是,我找不到没有它们的任何语言。我熟悉的所有语言都有null ,或类似的东西(例如 Perl 中的“未定义”)。

我意识到可能每种语言都需要某种方式来表达“缺乏值(value)”。然而,除了使用“null”或“undefined”,这也可以通过使用类似 Maybe 的东西来明确化。 (Haskell) 或 Optional ( Guava )。与“null”或“undefined”的主要区别在于,如果对象具有特定类型(Maybe、Optional...),则该对象只能具有“无值”。相比之下,“null”/“undefined”通常是每个类型可能的有效值。

在这个意义上,是否有没有“null”或类似概念的语言?

最佳答案

这是一个不完整的 null-safe 语言列表,因为它们没有任何不可为 null 的类型:

  • Dart (2021): 有可选类型 ?句法。
  • C# 8 (2019):选择加入“可为空引用类型”。
  • Kotlin (2015): 有可选类型 ?句法。
  • Pony (2015)。使用联合类型,其中一种类型是 None .
  • Swift (2014): 有可选类型 ?句法。
  • Crystal (2014): 有 nil ,但在编译时防止所有空指针异常。
  • Hack (2014): 有可选类型 ?句法。
  • TypeScript (2012):具有可以具有 undefined 的联合类型或 null作为一个变种。
  • Elm (2012):具有联合类型 Maybe .
  • Ceylon (2011): 有可选类型 ?句法。
  • Rust (2010):有可选类型 Option .
  • Fantom (2005): 有可选类型 ?句法。
  • F# (2005):具有联合类型 Option .
  • Nice (2003): 有可选类型 ?句法。
  • Netlogo (1999) 没有类型 null
  • OCaml (1996):具有联合类型 option .
  • Haskell (1990):具有联合类型 Maybe .
  • Standard ML (1990):具有联合类型 option .
  • Tcl (1988)
  • Erlang (1986)
  • Prolog (1972):逻辑变量代表“任何事物”。没有“空”或“未定义”的概念。

  • 随意补充列表。年份代表首次公开发行。

    关于language-agnostic - 是否有没有 "null"的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106234/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com