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

标签 language-agnostic null language-design

有很多人认为特殊值的概念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/

    相关文章:

    multithreading - 为什么比较和交换 (CAS) 算法是无锁同步的好选择?

    language-agnostic - 定位起点和终点之间的所有元素,由值(而非索引)给出

    concurrency - 什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存未命中?

    scala - 为未使用的变量使用占位符时出现 MatchError

    jquery:无法获取输入值

    javascript - [object Null] 和 [object Undefined] 尚未实现吗?

    oop - 为什么 Rust 不支持特征对象向上转换?

    conditional-statements - 为什么要在条件中使用赋值?

    language-design - 没有整数类型的编程语言

    logic - 为什么编程语言不使用简化的 bool 表达式?