4

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

4

3 回答 3

3

在 Objective-C 中,您可以将消息传递给实际存在的对象,nil并且它们会默默地返回nil自己。

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

于 2013-07-26T20:37:14.563 回答
0

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

于 2020-07-27T12:49:40.953 回答
0

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

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

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

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

于 2017-12-21T16:13:06.113 回答