Java 最佳实践:if(foo==false)或if(!foo)

Java 最佳实践:if(foo==false)或if(!foo),java,coding-style,Java,Coding Style,可能重复: 今天,我和我的同事吵了一架。 这是在Java代码中与if语句一起使用布尔变量的更好方法 boolean foo=true //1. if(foo == false) // do something else // do something else //2. if(!foo) // do something else // do something else 我支持[1],因为我认为它更具可读性。 你们觉得呢?我选择2,因为作为一个程序员,

可能重复:

今天,我和我的同事吵了一架。 这是在Java代码中与if语句一起使用布尔变量的更好方法

boolean foo=true
//1. 

if(foo == false)
    // do something
else
    // do something else

//2.

if(!foo)
    // do something
else
    // do something else
我支持[1],因为我认为它更具可读性。
你们觉得呢?

我选择2,因为作为一个程序员,甚至2都是可读的

假设你有数百个这样的验证检查,你总是用false检查

第2号,以及具有描述性名称的“foo”,因此代码可读性良好:

if(!haspulper)
...

如果您是唯一一个维护您的代码的人,那么您可以自由使用您喜欢的任何样式


话虽如此!我认识的大多数开发人员都喜欢foo

这是意见的问题。我更喜欢数字2,因为它编写的代码更少,而且我认为它同样可读。

我发现#2更可读。我想每个Java开发人员(我是C#dev)都知道什么!方法我

虽然这里可能不是重点,但我更喜欢用我的“真”块作为陈述。如果条件通常为false,那么我将命名变量来表示

if (notFoo) 
  // do something when
else
  // do something else

我觉得避免这样的事情是个好主意

if (foo == true){}
因为有时候你可能会写信

if (foo = true){}

作为印刷错误。通常情况下,这是一个很容易发现的错误,但它似乎很容易犯这种快速错误。

在语句中使用布尔变量作为条件时,不要将其与true进行比较。

这不是一个错误,但样式不好,因为它已经是一个布尔值,所以请使用它。

为什么“!foo”更好 而不是“foo==false”。参考

  • 简洁性:假设您所处的环境中布尔值为
    必需,并且“x”是布尔值,它是 写“x”的字符少于“x
    ==true”,或“!x”大于“x==false”

  • <> >:java中的经验丰富的程序员(或C++、C++、C等) 语言)希望看到“x”,而不是
    而不是“x==true”,以及“!x”而不是
    而不是“x==false”

  • 健壮性:在Java中,条件语句和循环语句都需要一个

    条件如果“y”不是布尔值,
    然后输入“if(y=foo)”的形式 {”将在
    但是如果“y”是一个布尔值,那么
    “if(y=foo){”不给出一个
    编译错误。因此,通过避免 “==”对于布尔型,避免设置
    让你自己面对一大堆虫子
    由打字错误引起的


是的,更好的命名变量绝对是最好的选择。变得更具可读性。现在我不得不承认我朋友(和你们)的观点。感谢大家的快速参与。:)如果你们支持1,为什么就到此为止?简化和荒谬要求你们使用
If(((foo==false==true)=true==true)…
。好吧!!我放弃了!我的手悬而未决!另请参见
if(foo=true){}
不是合法的Java并且不会编译(在IDE中应该是糟糕的语法)。害怕
if(var=constant)
语句是对C的一种错误保留,因为C是合法的(有时是鼓励的)在条件中赋值。不要担心它,而是担心什么更可读。@Avi:它确实是在JDK6下编译的。我给了你怀疑的好处,并自己编写了它。它编译时在FreeBSD框和Eclipse上的命令行上都没有警告,Eclipse本身也没有警告。你是对的。我抱歉。我很困惑,因为大多数赋值表达式在条件中都是非法的,除非它们是布尔类型(因为Java中没有自动的int到boolean或指针到boolean的转换)。不过我还是选择可读性更强的。对于整数,我会编写
if(foo==常量)
;如果是布尔型,我只会写
if(foo)
更具可读性且避免了此问题。-1对于完整的副本粘贴。首先,即使有链接,也要使内容看起来像是你的,或者重新措辞,而不是。将其格式化为引用的格式,以避免歧义。第二,如果粘贴的答案合适,则问题很可能是重复的,应该是c失败了。最后,这是一个糟糕的做法。@Pascal Thivent为我的答案,我添加了我的观点(前两行粗体)以及添加了来自Stephen的引用部分。我还添加了引用的链接。我不想表明引用部分是我的观点。如果感觉是这样,我很抱歉。我已经删除了歧义,并清楚地引用了它。感谢您删除歧义。我真的认为最大化透明度很重要,我将删除my downvote。我不同意。布尔变量应该尽可能以肯定的方式命名。你应该能够始终将!读为“not”,如果你确实需要foo,你可以避免混淆的双负!notFoo。唯一的例外是foo有反义词(如凸面vs凹面).同意双重否定是邪恶的:)但是,如果纯粹使用if-else,!notFoo将被命名为Foo:)