逻辑运算中的条件赋值

时间:2015-12-29 12:04:41

标签: java coding-style

这种简写是一种不好的做法,还是任何具有Java基础知识的程序员都知道,如果checkDoSResult等于host"localhost"下面的代码中int checkDoSResult = 0; if (!"localhost".equals(host) && (checkDoSResult = CheckHost.checkDoS(user+"@"+host, "query"))!=0) ... 没有被重新分配?

Action.INPUT

2 个答案:

答案 0 :(得分:2)

“任何具有Java基础知识的程序员”都知道某些事情的事实并不一定使“某事”成为一种好的做法。

条件和循环标题内的赋值很难被发现,因为程序员的眼睛期待那里的条件,而不是赋值。将赋值放在逻辑表达式的短路部分只会使事情变得更糟。

当然,任何接受过良好培训的程序员都能够“破译”你想说的话,但这需要时间。将条件拆分为两部分,并将赋值放在if语句的正文中,将有助于其他人理解您的意图,这比保存几行代码更重要。

答案 1 :(得分:1)

你可以拥有:

int checkDoSResult = 0;
if (!"localhost".equals(host) && (checkDoSResult = CheckHost.checkDoS(user+"@"+host, "query"))!=0) {
    ...
}

或者这个(@Arkantos):

int checkDoSResult = 0;
if (!"localhost".equals(host)) {
    checkDoSResult = CheckHost.checkDoS(user+"@"+host, "query");
    if (checkDoSResult != 0) {
        ...
    }
}

两个片段都是一样的,但哪一个更容易阅读?我会选择第二个选项。