[英]Using double negatives to test for conditions
为了验证用户输入,我不确定哪种选择更好
isNull( Object input )
notNull( Object input )
apache的commons lang库选择了#2,但我对双重否定不满意。 你说什么 ?
对我来说,双重否定总是一件坏事。 我会说坚持isNull。 然后在阅读时检查是否为空。 相反的是
if (! isNull(o) )
// ...
读出“如果不是null”。 当然,大声读出声音听起来有些迟钝,但是比使用选项#1检查是否为空更有意义。
if (! isNotNull(o))
// ...
一条使您倒带的语句,然后说:“嘿,请稍等...如果不是,则……”。
但是,如果已经有一个方法名称带有负数的标准,请坚持使用。 标准是好事,不应仅仅因为某人“不舒服”就违反标准。
对于那些比它们替换的代码更长的函数,我感到不舒服。
我会使用x == null或x!= null。 我同意双重否定也不清楚。
给您一个难题,什么时候(s!= s)正确? 令人困惑的行为的一个很好的例子。 ;)
老实说,我认为这没有多大区别。
如果您正在设计自己的API,请以最舒适的方式实现它。 确实,没有充分的理由不同时执行isNull
和notNull
如果这会使您感到更快乐。
但是我认为, 仅仅因为您对双重否定词“不满意”而放弃使用某些第三方库的计划是很愚蠢的。 他们真的没有那么混乱。
答案取决于许多考虑因素,其中包括:
如果您想得到更周到的答案,请让我们知道更多详细信息。 同时,我的首要建议是选择能提高代码可读性的一切:您想为将来的维护者提供尽可能多的帮助。
这个问题让我有些困惑。 如果所讨论的方法只是根据参数是否为null
返回布尔null
,那么== null
或!= null
会更好。
但是,对Apache Commons Lang的引用似乎表明这是有效性检查,并且如果引用为null
则应引发适当的异常。 在这种情况下,您将无法轻松反转输出。
FWIW,似乎JDK7将引入notNull
方法,如在适当的邮件列表上所讨论的, notNull
类似于:
public static <T> T notNull(T obj)
用作:
import static java.util.Object.notNull;
public final MyClass {
private final Thing thing;
public MyClass(Thing thing) {
this.thing = notNull(thing);
}
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.