我一直听��们谈论非空引用类型如何解决许多错误并使编程变得更加容易。甚至null的创建者称其为他的十亿美元失误,而Spec#已经引入了非空类型来解决这个问题。
编辑:忽略我关于Spec#的评论。我误解了它的工作方式。
编辑2:我可能在和错的人说话,我真的希望有人能与我争论 :-)
所以我猜,作为少数派,我可能是错的,但我不明白为什么这场辩论有任何价值。我认为null是一个找bug的工具。考虑以下情况:
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
BAM!访问冲突。有人忘记初始化 c
。
现在考虑一下这个:
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
糟糕,循环被默默地跳过了。追踪问题可能需要一些时间。
如果你的类是空的,那么代码无论如何都会失败。为什么不让系统告诉你(虽然可能有点粗鲁),而不是让你自己去弄清楚呢?