使用双阴性来测试条件

时间:2009-10-18 10:16:01

标签: java oop naming-conventions

为验证用户输入,我不确定哪两种选择更好

1

isNull( Object input )

2

notNull( Object input )
apache的公共场所lang图书馆选择#2,但我对双重否定感到不舒服。你怎么说?

5 个答案:

答案 0 :(得分:4)

对我而言,双重否定总是一件坏事。 我会说坚持isNull。检查无效然后在阅读时有意义。 相反的是

if (! isNull(o) )
    // ...

读出“if not is null”。当然,它听起来迟钝大声读出,但它比使用选项#1检查无效更有意义。

if (! isNotNull(o))
    // ...

这句话让你倒带并说“嘿,等一下......如果不是......”。


但是如果标准已经存在方法名称中的否定,请坚持下去。标准是好事,不应因为某人“不舒服”而被打破。

答案 1 :(得分:1)

我对那些比他们替换的代码更长的函数感到不舒服。

我会使用x == null或x!= null。我同意双重否定也不清楚。

一个谜题,什么时候(s!= s)是真的?混淆行为的一个很好的例子。 ;)

答案 2 :(得分:0)

老实说,我认为这并没有多大区别。

如果您正在设计自己的API,请按照您最熟悉的方式实施它。事实上,没有强有力的理由不实施isNullnotNull,如果这让你感到更快乐。

但我认为放弃使用某些第三方库完全的计划是愚蠢的,因为你对“双重否定”感到“不舒服”。他们真的不是那么令人困惑。

答案 3 :(得分:0)

这里的答案取决于许多因素,其中一些是:

  • 您的编程环境最自然地支持什么?
  • 同一项目中的其他类似代码有什么作用?
  • 您正在使用哪种编码标准?
  • 阅读代码的其他人更容易理解哪种方法?

如果您想要更加深思熟虑的答案,请告诉我们更多细节。与此同时,我的最佳建议是提高代码的可读性:您希望尽可能多地为未来的维护者提供帮助。

答案 4 :(得分:0)

我对这个问题感到有些困惑。如果有问题的方法只是返回一个布尔值,具体取决于参数是null,那么== null!= null要好得多。

但是,对Apache Commons Lang的引用似乎表明这是有效性检查,应该抛出一个适当的异常,引用是null。在这种情况下,您无法轻松反转输出。

FWIW,看起来好像JDK7会引入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);
    }
    ...