哪个更清晰:if(!value)还是if(flag == value)?
我知道这是一个主观的问题,所以如果需要closures的话,我表示歉意,但是我觉得我经常想知道是否有一种forms比另一种更普遍。
显然,最好的答案是“重构代码,所以你不需要testing虚假”,但是有时候没有简单的方法去做,“else”分支只是继续处理。 所以当你必须有一个“如果不是假的”结构,这是首选的标准:
不是操作员
if(!value)
或者testing为假
if(value == false)
if(!value)
更容易/更快跟随。 主观如你所说。 只要你一致,这是主要的事情。
编辑
还有一点要补充 – 省略true / false关键字也应该(希望)强制编码器使用更好的命名variables。 布尔variables应该总是指示意义或状态目的,例如:
if(MyWallet.IsEmpty)
上面没有理由使用== false
或== true
因为它是多余的。 以上是人类可读的立即。
比解读要好得多:
if(MyWallet.EmptyStatus == true)
或者像这样荒谬的东西。
我个人喜欢
if ((value == false) == true)
…
因为这是validation语句value is false
的实际上评估为一个布尔真正…
那么,显然,涵盖两个正确答案就更加清晰了,
if ((value == false) == true && (value == false) != false)
<grin/>
对于那些真正的贪婪的人来说,要求清晰,并要求无可辩驳的可读性,我build议
if (((value == false) == true && (value == false) != false) == true)
if(!value)
这在我看来总是很清楚。
if(value == false)
我讨厌这样说,因为这听起来有点意思,但这通常表明编写代码的人并不真正理解布尔值的使用。 您不需要重新validationif语句中的布尔值是什么。 这是多余的。
(就个人而言,如果他们给variablesvalue
而不是更有意义的话,我也会对这个人感到恼火,我有一种感觉,你发布的只是伪代码,我肯定会在审查过程中)。
编辑(回复下面的评论):
它可能看起来微不足道,但往往是一个更大的事情的标志。 实际上,大多数使用var == true等的人都不明白。 这只是一个事实。 我不是说他们愚蠢,或者他们不应该是程序员,只是有可能是他们需要审查和学习的东西。 问题是,当逻辑变得复杂的时候,不理解这样的概念会导致更多的问题。 有人说“这是一种风格”。 没关系。 在这种情况下,真正的问题是:“这样做对我有什么好处?我或他人从中得到了什么? 如果你不能很好地回答这个问题,那么你需要问自己:“为什么这是个好主意?
我永远不会使用if(value == true)
,所以为了一致性我也不会使用if(value != false)
。
if(!value)
更清晰,更“优雅”,特别是如果你正确地命名布尔variables
- isWhatever
- hasWhatever
- 等等
就像是
if (Page.IsPostback == true)
对我来说似乎多余
反对意见(种类)
从编译的angular度来看,你将得到相同的IL,所以从可读性的angular度来看,这只是一个问题。
从这个angular度来看, if(value == false)
对于一个随便的读者来说更为明显,而且错过了这个机会的可能性就越小。 在布尔之前。
老实说,我使用这两种方法,而且大部分时候,我都依赖于我的variables名。 如果说“不”来代替“爆炸”还是可以的,我很可能会用爆炸符号
例如
if(!gotValue) {} //if (I've) not gotValue //but if(checkValue == false){} //If (I've) not checkValue doesn't quite work here grammatically.
在VB中编码时使用Not value
,但在C#中编码时倾向于使用value == false
。 我发现感叹号有时会以variables的名义丢失(例如!legal)。 也许是因为我是一个经验丰富的老手。
我不认为这是主观的。 我从来没有见过它在较长的forms推荐。 其实所有的书籍和编码指南和“如何成为一个好的程序员”我读过的HowTos阻止了它。
它属于同一类别
if (value) { return true; } else { return false; }
OTOH,这里给出的所有答案,使我的第一个陈述不等于不正确。
我通常会喜欢if(!value),当我知道肯定的值是一个布尔值。 但是很多时候它可以是一个string,或者一个数字。
在很多语言中,数字零将在条件中被评估为假 (但不是全部)。 但是,string“0”将评估为true 。 特别是在JavaScript中,尤其是如果你从服务器接收到JSONstring,特别是如果服务器是用PHP编写的(因为大多数PHP开发人员不小心只从数据库取得值并调用json_encode,数据库会产生string,并且不知道所有那些用作布尔字段的零和那些将在另一端被编码为string的线索,因此在条件中都被视为真 )。
饶舌了 我的build议是:明确的,特别是如果你的语言是“非常dynamic”的types(即JavaScript,PHP,Perl)。
不pipe你喜欢什么 挑一个,坚持下去。
我会倾向于使用if(!value)
因为根据所涉及variables的名称,根据英语语义,“真实”情况更有意义。
考虑一下MSDN文章中的例子之一:
if(pane.IsChecked)
英文为“如果窗格被选中”。
但是,如果( pane.IsChecked == true
)以英文显示为“如果窗格是否被选中”。 这个说法在英文上不太清楚,应该是这样。
我们不使用二进制编写C#代码的原因之一是人的可读性。 如果你在阅读代码时能够selectstream畅的代码,而不是代码,那么select一个更具可读性的代码。 我不认为添加“ == true
”使这个例子更具可读性,MSDN也不这么认为。
当然,这是一个很小的例子。 但是,正如其他一些答案所指出的,如果不将这种思维方式应用于较大规模的案例,可能会影响可读性。
我喜欢if (!value)
风格至less用于评估像Page.IsPostback
等variables或常见属性。 对于任何更复杂的事情,我倾向于像下面这样将expression式括起来:
if (!(SomeType.SomeProperty.CallingAMethod(input).GetSomething.BooleanProperty))
只是要多加注意一下。
总而言之, unless
和until
关键字, unless
这是Perl风格的一个参数。
我更喜欢第二个选项, if (value == false)
之一。 我很乐意在支持它的语言中使用if (~value)
或if (not value)
,但是!
只是简单地将waaaaay与variables名或开括号或|进行合并 或|| 运营商…至less在我看来。
另外,还有两件事情:
- 我从来没有做,
if (value == true)
,我知道我不一致。 虽然一致性在我看来非常重要,但是讨厌!
更糟的是 - 我认为这是一个个人品味的问题,就像新一轮的辩论一样。 我永远不会批评队友这样的傻事,而且我也很难理解那些愿意的人。
如果条件只是检查一个值,那么!value
更快。
但是,当条件包含多个值检查时,我发现读取value == false
更容易。 不知何故,parsing多个检查的等式比多个值的否定更容易。
我很抱歉地说,第二只看起来很愚蠢。
我会添加一个额外的级别,如果有人喜欢它:
if( (value==false) == true )
🙂
我其实有很多可能的forms。
这实际上并不是如何写入标准,但这是我如何看待它:
//if foo is(or exists) if(foo) //if foo is true if(foo == true) //if foo doesn't exist if(!foo) if foo is false if(foo == false)
因此,我不认为==错误是多余的。