简化陈述

时间:2014-04-17 20:59:23

标签: java intellij-idea simplify

我正在开展一个项目,我正在使用Intellij IDEA。在我写作的时候,我收到了一条通知,说明我的if语句可以简化了。 (请注意,我还不熟悉编码)

它说:

报告if语句可以简化为单个赋值还是返回语句。 例如:

if (foo()) {
   return true;
} else {
   return false;
}

可以简化为

return foo();

这是如何工作的? 假设foo()是数字4,这不会只返回4而不是真的吗?我误解了什么?

修改

这是我写的代码:

if (row > 0 && row < 4 && col > 0 && col < 4) {
    return false;
} else {
    return true;
}

可以简化为:

return !(row > 0 && row < 4 && col > 0 && col < 4);

我只是不明白这是如何简化的。

4 个答案:

答案 0 :(得分:6)

(row > 0 && row < 4 && col > 0 && col < 4)本身就是一个布尔值(真或假)。

我们可以将boolean && boolean && boolean && boolean分解为<>运算符返回布尔值。同样,布尔值和布尔值是布尔值,因此整个表达式是布尔值,可以这样返回。

您可以这样考虑:

  • 对于这行,你有一个数字,所以你可以说&#34;有多少&#34;或&#34;哪个号码&#34;。对于该列也是如此。
  • 对于比较,您可以问:如果x和y是数字,那么x&lt; ÿ?可能的答案是truefalse。因此布尔。
  • 对于&&||!,您可以问自己:&#34;如果a和b是陈述(真或假),那么&#34; a和b都是真的&#34;是真还是假。同样适用于&#34;或&#34;,或&#34; a不是真的&#34;。结果是真实的。

现在您可以查看if,并将其读作&#34;如果 foo 为true,则返回false。否则,返回true&#34;。这明显简化为&#34;返回 foo &#34;或者,&#34;不返回 foo &#34;。

答案 1 :(得分:1)

对于要编译的if语句,括号之间的条件必须是布尔值。

所以,如果你可以把方法foo作为if的条件,它会返回一个布尔值。

因此,你可以写:

return foo(); 

在您的特定情况下,表达式!(row > 0 && row < 4 && col > 0 && col < 4)的计算结果为true或false,因此您可以写:

return !(row > 0 && row < 4 && col > 0 && col < 4);

答案 2 :(得分:1)

您的Foo()方法返回一个布尔值,因此它将为true或false。因此,您不需要通过添加if语句来检查true或false来添加冗余,然后返回true或false。

答案 3 :(得分:0)

我有类似你的代码:

if (other.getClassAbbr().equals(this.getClassAbbr())
        && other.getInstance().equals(this.getInstance())) {
    return true;
}

return false;

在考虑之后,我接受了这样的建议: 'if'语句可以简化

然后将代码更改为:

    return other.getClassAbbr().equals(this.getClassAbbr())
            && other.getInstance().equals(this.getInstance());

是的,代码变得干净。