【发布时间】:2010-12-22 06:36:24
【问题描述】:
空指针被描述为“billion dollar mistake”。某些语言具有无法分配空值的引用类型。
我想知道在设计一种新的面向对象语言时,是否应该将默认行为用于引用以防止被分配为 null。然后可以使用特殊版本的 来覆盖此行为。例如:
MyClass notNullable = new MyClass();
notNullable = null; // Error!
// a la C#, where "T?" means "Nullable<T>"
MyClass? nullable = new MyClass();
nullable = null; // Allowed
所以我的问题是,有什么理由不用新的编程语言来做这件事吗?
编辑:
我想补充一点,a recent comment on my blog 指出不可为空的类型在数组中使用时存在特定问题。我还要感谢大家的有用见解。很有帮助,抱歉我只能选择一个答案。
【问题讨论】:
-
切换到函数式编程语言 ;-)
-
@jldupont:请将其发布为答案。
-
我添加了一个链接。当然,在 Java、C# 或 Python 中,空值问题并不像在 C 或 C++ 中那样大。然而,在这些语言中仍然有很多样板代码专门用于空检查,并且开发人员花费了大量时间来追踪空指针。当您认为可以在编译时通过添加一个额外的字符来避免它时,这有点愚蠢。
-
一个空的指针是危险的。空对象引用不是;如果你不使用 null 来表示一个未初始化的对象引用,你就必须发明另一个哨兵值来达到同样的目的
-
@Steven A Lowe - 关键是在不必要时消除“未初始化状态”/哨兵的可能性(常见情况)。您可以随时在需要时选择使用可为空的类型。
标签: language-agnostic null language-design nullable