我有一些开发人员经常把If If检查
例如:
Run(Order order)
{
if (order == null) return;
}
Run Code Online (Sandbox Code Playgroud)
在他们的代码中,因为他们认为如果有人传入一个null参数,他们就会保护他们的类.我想告诉他们的缺陷在他们的逻辑,因为如果有人传入null在这种情况下,最有可能的问题与消费者的代码,而是这个类的抛出异常和故障的快速,它优雅地处理的不良行为消费者并继续努力.
另一个建议是让前提条件或防护类快速失败并抛出异常.任何事情,但忽略了消费者可能有一些其他问题的事实,我帮助掩盖它.
我如何让人们欣赏你的班级不应该如此宽容的事实.如果有人没有传递好的数据,应该告诉他们.
任何好的文章或建议,以帮助我理解这一点?
JSB*_*ոգչ 13
如果你的班级不能接受null论证,那么最好的办法就是:
if (arg == null)
throw new ArgumentNullException();
Run Code Online (Sandbox Code Playgroud)
这对于NullPointerException深入了解堆栈非常有利.在最坏的情况下,你会缓存这些null地方,并不会真正引发异常,直到很久以后,看看你有多大的快乐调试问题,然后.
正如其他人所说,有时合同说这null没关系.在这种情况下,在代码的某些部分周围有一个保护条款是正确的 - 尽管那时我会说最好的设计是添加一个没有可选null参数的重载.
这实际上取决于具体情况.正如您似乎指出的那样,很少提供诸如"不在代码中放置空检查"之类的一般性建议.班级合同应该定义什么是合法的,什么不是.但是,如果合同明确表明传入null是不可接受的,那么异常确实是一种恰当的反应.