关于java:在’if’条件下检查布尔值

Boolean checking in the 'if' condition

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

1
2
3
4
5
6
boolean status = true;
if (!status) {
    //do sth
} else {
    //do sth
}

或:

1
2
3
4
5
if (status == false) {
    //do sth
} else {
    //do sth
}

我建议你这样做:

1
2
3
4
5
if (status) {
    //positive work
} else {
    // negative work
}

==测试虽然明显是多余的,但也存在单个=打字错误的风险,这将导致分配。


当然是前者。后者是多余的,只是说明你对布尔的概念还没有很好的理解。

还有一个建议:为您的boolean变量选择一个不同的名称。按照这个Java风格指南:

is prefix should be used for boolean variables and methods.

isSet, isVisible, isFinished,
isFound, isOpen

This is the naming convention for
boolean methods and variables used
by Sun for the Java core packages.

Using the is prefix solves a common
problem of choosing bad boolean names
like status or flag. isStatus or
isFlag simply doesn't fit, and the
programmer is forced to chose more
meaningful names.

Setter methods for boolean variables
must have set prefix as in:

void setFound(boolean isFound);

There are a few alternatives to the
is prefix that fits better in some
situations. These are has, can and
should prefixes:

1
2
3
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;


如果您在这个页面上查看备选方案,当然第一个选项看起来更好,第二个选项就更详细了。但是,如果您正在查看其他人编写的一个大型类,那么冗长的内容会在立即了解条件测试内容与否之间产生差异。

我不再使用Perl的原因之一是它非常依赖标点符号,而标点符号在阅读时要慢得多。

我知道我在这里被否决了,但我几乎总是站在更明确的代码一边,这样其他人就能更准确地阅读它。同样,我也不会使用名为"status"的布尔变量。也许是issueaccess或者仅仅是success,但是"状态"是真是假对偶然的读者来说并不是什么意义。正如你所说,我非常喜欢代码的可读性,因为我读了很多别人写的代码。


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

编辑

如果真的需要第二种形式,那么if (false == status) 虽然更丑,但可能更安全(用打字错误)。


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

当人们问"哪种做法更好"时,这暗示着两者都是正确的,所以这只是一个更容易阅读和维护的问题。

如果您将变量命名为"status"(在您的示例代码中就是这样),那么我更希望看到

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

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

1
2
3
if(!isReadable) { // if not readable
  System.out.println("I'm having a headache reading your code");
}

前者。后者只是增加了冗长的内容。


第一个。但另一点是,以下内容也会使代码更具可读性:

1
2
3
4
5
if (!status) {
    // do false logic
} else {
    // do true logic
}

注意,if(之间以及else语句之前都有多余的空格。

编辑

正如@mudassir所指出的,如果使用逻辑的方法中没有其他共享代码,那么更好的样式是:

1
2
3
4
5
if (!status) {
    // do false logic
}

// do true logic

阅读时我的个人感觉

1
2
3
if(!status) : if not status

if(status == false) : if status is false

如果你不习惯的话!状态读取。我认为第二种方法是无害的。

如果你使用"活动"而不是状态I,如果(!激活)更可读


第一种风格更好。尽管您应该使用更好的变量名


这也是更易读和良好的实践。

1
2
3
4
5
if(!status){
//do sth
}else{
//do sth
}