我知道你不能在Haskell中获得空指针异常,但我很好奇其他语言有这个功能。例如,一位同事询问是否有任何解释性语言不允许空值,我不知道答案。我所知道的唯一一种避免这种billion dollar mistake的语言是Haskell。
答案 0 :(得分:3)
在Objective-C中,您可以将消息传递给实际为nil
的对象,并且他们自己静默返回nil
。
但是,当您执行类似C的指针解除引用时(即使用*
或.
运算符时),您仍然可能面临空指针异常的风险。
答案 1 :(得分:0)
Kotlin是一种静态类型的编程语言,可以在Java虚拟机上运行,也可以编译为JavaScript源代码或使用LLVM编译器基础结构。
Kotlin通过区分可空和非可空类型来避免空指针异常。所有可空变量必须用“?”声明postfix后的类型名称。对可空变量的操作需要开发人员特别小心:必须在使用该值之前执行null-check。
要在可变类型的变量上调用方法,必须使用“?”运算符,如果变量不为null(并使其返回类型为可空),则仅调用该方法,或者“!!”运算符,断言变量当前不为空。
请注意,如果您使用“!!”,您仍然可以在Kotlin上获得空指针异常null对象上的操作符或与Java交互时的操作符。
答案 2 :(得分:0)
C ++值和引用不能为null,只能是指针。如果不使用指针,并且在现代C ++中很少使用指针,则可以完全避免出现此问题。使用静态多态性优于动态方式。仅当可能的实现集在编译时未知时,才严格需要动态多态。在这种情况下,空对象模式或工厂可以避免出现空指针问题(使用const关键字可以防止不必要的重新分配)。