就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,访问帮助中心 /help/reopen-questions 以获得指导。
空指针被描述为“十亿美元的错误 http://lambda-the-ultimate.org/node/3186 "。某些语言具有不能分配 null 值的引用类型。
我想知道在设计一种新的面向对象语言时,默认行为是否应该是引用以防止被分配 null。然后可以使用特殊版本来覆盖此行为。例如:
MyClass notNullable = new MyClass();
notNullable = null; // Error!
// a la C#, where "T?" means "Nullable<T>"
MyClass? nullable = new MyClass();
nullable = null; // Allowed
所以我的问题是,有什么理由不在新的编程语言中这样做呢?
EDIT:
我想补充一点 指出不可空类型在数组中使用时存在一个特殊问题。我还要感谢大家的有用见解。非常有帮助,抱歉我只能选择一个答案。
我认为默认情况下不可为空引用类型的主要障碍是编程社区的某些部分更喜欢创建-设置-使用模式:
x = new Foo()
x.Prop <- someInitValue
x.DoSomething()
重载构造函数:
x = new Foo(someInitValue)
x.DoSomething()
这使得 API 设计者对实例变量的初始值感到困惑,否则实例变量的初始值可能为 null。
当然,就像“null”本身一样,创建-设置-使用模式本身会创建许多无意义的对象状态并阻止有用的不变量,因此摆脱它确实是一种祝福而不是诅咒。然而,它确实以许多人不熟悉的方式影响了一些 API 设计,所以这不是一件容易做的事情。
但总的来说,是的,如果有一场巨大的灾难摧毁了所有现有的语言和编译器,人们只能希望当我们重建时我们不会重复这个特定的错误。可空性是例外,而不是规则!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)