在IF条件下使用NOT运算符

Eug*_*ene 27 java boolean-operations

在IF条件下避免使用NOT运算符以使代码更易读,这是一个很好的做法吗?我听说if (doSomething())那时比较好if (!doSomething()).

Bil*_*ard 42

这真的取决于你想要完成的事情.如果你没有其他条款那么if(!doSomething())似乎没问题.但是,如果你有

if(!doSomething()) {
    ...
}
else {
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

我可能会颠倒那个逻辑来删除!运算符并使该if子句更加清晰.


hvg*_*des 19

作为一般性陈述,它的好处是使你的if条件尽可能可读.对于你的例子,使用!没关系.问题出在事情的样子

if ((a.b && c.d.e) || !f)
Run Code Online (Sandbox Code Playgroud)

你可能想做点什么

bool isOk = a.b;
bool isStillOk = c.d.e
bool alternateOk = !f
Run Code Online (Sandbox Code Playgroud)

那么你的if语句被简化为

if ( (isOk && isStillOk) || alternateOk)
Run Code Online (Sandbox Code Playgroud)

它只是使代码更具可读性.如果你必须调试,你可以调试isOk变量集,而不必在范围内挖掘变量.它对处理NPE也很有帮助 - 将代码分解为更简单的块总是好的.


Kyl*_*ndo 11

不,!if..then..else语句中使用运算符绝对没有错.

变量的命名,以及在您的示例中,方法是重要的.如果您正在使用:

if(!isPerson()) { ... } // Nothing wrong with this
Run Code Online (Sandbox Code Playgroud)

然而:

if(!balloons()) { ... } // method is named badly
Run Code Online (Sandbox Code Playgroud)

这一切都归结为可读性.始终瞄准最可读的东西,你不会出错.总是尽量保持你的代码连续,例如,看看比尔蜥蜴的答案.