当程序员抱怨空错误/异常时,有人经常会问我们做什么而没有null.
我对选项类型的酷感有一些基本的想法,但我没有最好的表达它的知识或语言技巧.对于普通程序员可以接近的方式写的以下内容有什么好的解释,我们可以指出那个人?
null programming-languages functional-programming nullpointerexception non-nullable
我知道在编程语言中不需要NULL,我最近决定不在我的编程语言中包含NULL.声明是通过初始化完成的,因此不可能有一个未初始化的变量.我希望这将消除NullPointerException
支持更有意义的例外或者根本没有某些类型的错误.
当然,由于语言是用C实现的,因此在封面下会使用NULL.
我的问题是,除了使用NULL作为错误标志(这是用异常处理)或作为数据结构的端点,如链接列表和二叉树(这是由有区别的联合处理)是否有任何其他用例为NULL哪个我应该有解决方案?没有NULL可能会给我带来什么问题吗?
空指针被描述为" 十亿美元的错误 ".某些语言具有无法分配空值的引用类型.
我想知道在设计一种新的面向对象语言时是否应该使用默认行为来防止被赋值为null.然后可以使用特殊版本来覆盖此行为.例如:
MyClass notNullable = new MyClass();
notNullable = null; // Error!
// a la C#, where "T?" means "Nullable<T>"
MyClass? nullable = new MyClass();
nullable = null; // Allowed
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,有没有理由不在新的编程语言中这样做?
编辑:
我想补充一点,我博客上的最新评论指出,当在数组中使用时,非可空类型有一个特殊的问题.我还要感谢大家的有益见解.这非常有帮助,对不起,我只能选择一个答案.
它经常听说Haskell(我不知道)有一个非常有趣的类型系统.我对Java非常熟悉,而且对C#有点熟悉,有时我会对类型系统进行战斗,所以有些设计适应或以某种方式更好地工作.
这让我想知道......
由于Java/C#类型系统的不足,以某种方式出现了什么问题?你是如何处理它们的?