【问题标题】:What programming languages prevent null pointer exceptions?哪些编程语言可以防止空指针异常?
【发布时间】:2013-07-26 20:32:00
【问题描述】:

我知道在 Haskell 中你不能得到空指针异常,但是我很好奇还有哪些其他语言有这个特性。例如,一位同事问是否有任何解释语言不允许空值,而我不知道答案。我所知道的唯一避免这种billion dollar mistake 的语言是Haskell。

【问题讨论】:

  • PHP?从技术上讲,它不会给你一个空指针异常,只是一个警告。
  • @BartFriederichs 在我看来,这听起来并不能避免“十亿美元的错误”,但知道它仍然很有趣
  • 实际上你可以在 Haskell 中窥视/戳一个 nullPtr(在 IO monad 中)

标签: null nullpointerexception


【解决方案1】:

在 Objective-C 中,您可以将消息传递给实际上是 nil 的对象,然后它们自己会默默地返回 nil

但是当您执行类似 C 的指针取消引用时(即使用 *. 运算符时),您仍然可能面临空指针异常的风险。

【讨论】:

    【解决方案2】:

    Kotlin 是一种静态类型的编程语言,在 Java 虚拟机上运行,​​也可以编译为 JavaScript 源代码或使用 LLVM 编译器基础架构。

    Kotlin 通过区分可空类型和不可空类型来避免空指针异常。所有可为空的变量都必须用“?”声明类型名称后的后缀。对可空变量的操作需要开发人员特别注意:在使用该值之前必须执行空检查。

    要调用可为空类型的变量的方法,您必须使用“?”运算符,仅在变量不为空时调用方法(并使其返回类型可为空),或“!!”运算符,它断言变量当前不为空。

    请注意,如果您使用“!!”,您仍然可以在 Kotlin 上获得空指针异常。空对象上的运算符或与 Java 进行互操作时。

    【讨论】:

      【解决方案3】:

      C++ 值和引用不能为空,只有指针可以。如果你不使用指针并且在现代 C++ 中很少需要使用它,你可以完全避免这个问题。使用静态多态性优于动态多态性。只有当可能的实现集在编译时未知时,动态多态性才是绝对必要的。在这种情况下,空对象模式或工厂可以避免空指针问题(const 关键字可以帮助防止不必要的重新分配)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 2017-12-27
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多