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”,而不是 - 健壮性:在Java中,条件语句和循环语句都需要一个
条件如果“y”不是布尔值,
然后输入“if(y=foo)”的形式 {”将在
但是如果“y”是一个布尔值,那么
“if(y=foo){”不给出一个
编译错误。因此,通过避免 “==”对于布尔型,避免设置
让你自己面对一大堆虫子
由打字错误引起的
而不是“x==true”,以及“!x”而不是
而不是“x==false”
是的,更好的命名变量绝对是最好的选择。变得更具可读性。现在我不得不承认我朋友(和你们)的观点。感谢大家的快速参与。:)如果你们支持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:)