当程序员抱怨空错误/异常时,有人经常会问我们做什么而没有null.
我对选项类型的酷感有一些基本的想法,但我没有最好的表达它的知识或语言技巧.对于普通程序员可以接近的方式写的以下内容有什么好的解释,我们可以指出那个人?
null programming-languages functional-programming nullpointerexception non-nullable
我曾经读过,拥有可空类型是一种绝对的邪恶.我相信这是由创建它们的人写的一篇文章(在Ada中?)我相信这是文章
无论如何,那么如果默认情况下像C#这样的语言使用非可空类型呢?你会如何替换C#或Ruby中的一些常用习语或任何其他null可接受值的常用语言?
我正在设计一种语言,我想知道默认情况下使引用类型不可为空是否合理,并使用"?" 可以为空的值和引用类型.这有什么问题吗?你会怎么做:
class Foo {
Bar? b;
Bar b2;
Foo() {
b.DoSomething(); //valid, but will cause exception
b2.DoSomething(); //?
}
}
Run Code Online (Sandbox Code Playgroud) 我一直听到人们谈论非可空引用类型将如何解决如此多的错误并使编程变得更加容易.即使是null的创建者也称它为十亿美元的错误,而Spec#引入了非可空类型来解决这个问题.
编辑:忽略我对Spec#的评论.我误解了它是如何工作的.
编辑2:我必须和错误的人交谈,我真的希望有人能够与之争辩:-)
所以我猜想,在少数人中,我错了,但我不明白为什么这场辩论有任何优点.我认为null是一个bug查找工具.考虑以下:
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
Run Code Online (Sandbox Code Playgroud)
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) { ... …Run Code Online (Sandbox Code Playgroud)