布尔检查'if'条件

jas*_*ing 17 java coding-style

哪一个是更好的Java编码风格?

boolean status = true;
if (!status) {
    //do sth
} else {
    //do sth
}
Run Code Online (Sandbox Code Playgroud)

要么:

if (status == false) {
    //do sth
} else {
    //do sth
}
Run Code Online (Sandbox Code Playgroud)

akf*_*akf 26

我建议你这样做:

if (status) {
    //positive work
} else {
    // negative work
}
Run Code Online (Sandbox Code Playgroud)

这些==测试虽然显然是多余的,但也存在一个=错字导致分配的风险.


mis*_*tor 21

当然,前者.后者是多余的,只是表明你没有很好地理解布尔的概念.

还有一个建议:为boolean变量选择一个不同的名称.根据这个Java风格指南:

是前缀应该用于布尔变量和方法.

isSet,isVisible,isFinished, isFound,isOpen

这是booleanSun用于Java核心包的方法和变量的命名约定 .

使用is前缀解决了选择错误的布尔名称的常见问题,如statusflag.isStatus或者 isFlag根本不适合,程序员被迫选择更有意义的名字.

boolean变量的setter方法必须设置前缀,如下所示:

void setFound(boolean isFound);

is在某些情况下,前缀有一些替代方案可以 更好地适应.这些has,canshould前缀:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
Run Code Online (Sandbox Code Playgroud)


dj_*_*ult 10

如果你看看这个页面上的替代品,当然第一个选项看起来更好,第二个选项更加冗长.但是,如果你正在查看其他人写的大型课程,那么详细程度可以在实现条件测试与否之间产生差异.

我离开Perl的原因之一是因为它在很大程度上依赖于标点符号,这在阅读时要慢得多.

我知道我在这里投票,但我几乎总是站在更明确的代码旁边,以便其他人可以更准确地阅读它.然后,我再也不会使用名为"status"的布尔变量.也许是成功或只是成功,但"状态"是真还是假对于随意的读者并不直观.正如您所知,我非常注重代码可读性,因为我阅读了其他人编写的代码.


lij*_*jie 7

第一个,或 if (status) { /*second clause*/ } else { /* first clause */ }

编辑

如果真的需要第二种形式,那么if (false == status) <etc>,虽然丑陋,可能更安全(wrt拼写错误).


RAY*_*RAY 5

这实际上还取决于您如何命名变量。

当人们问“哪个是更好的实践”时,这隐含着两者都是正确的,所以这只是哪个更容易阅读和维护的问题。

如果您将变量命名为“status”(示例代码中就是这种情况),我更希望看到

if(status == false) // if status is false

另一方面,如果您将变量命名为 isXXX(例如 isReadableCode),则前者更具可读性。考虑:

if(!isReadable) { // if not readable
  System.out.println("I'm having a headache reading your code");
}
Run Code Online (Sandbox Code Playgroud)