bool foo = true;
// Do this?
if (foo)
{
}
// Or this?
if (foo == true)
{
}
我喜欢其中一个,我的同事喜欢另一个。结果是一样的,但哪一个(更)正确?
bool foo = true;
// Do this?
if (foo)
{
}
// Or this?
if (foo == true)
{
}
我喜欢其中一个,我的同事喜欢另一个。结果是一样的,但哪一个(更)正确?
我看过的几乎所有人都倾向于一个观点
if (foo)
{
}
事实上,我看到过很多人批评显示比较(explicit comparison),甚至在此之前我自己也可能这样做过。我认为,“简短”风格是习惯用语。
编辑:
请注意,这并不意味着这行代码总是不正确的。考虑以下情况:
bool? maybeFoo = GetSomeNullableBooleanValue();
if (maybeFoo == true)
{
...
}
即使不加 "== true",这段代码也能编译通过,但是因为从 bool?
到 bool
没有隐式转换,所以无法正确运行。
(maybeFoo.HasValue && maybeFoo.Value)
,但是maybeFoo == true
更加简洁明了。 - fredwif (maybeFoo ?? false)
或if (maybeFoo ?? true)
。但一般我更喜欢使用==
。 - Jon Skeetif (maybeFoo === true)
- undefined这取决于你的情况。
我认为,如果你的布尔变量有一个好名字,那么:
if (control.IsEnabled) // Read "If control is enabled."
{
}
如果变量名不太明显,那么检查其是否为 true
会有助于理解逻辑,但最好还是使用更清晰的变量名。
if (first == true) // Read "If first is true."
{
}
如果您打算选择
if(foo == true)
为什么不一路走到黑呢?
if(foo == true == true == true == true == true == true == true == true == true)
这是同一件事情。
我不同意如果明确命名(例如:IsSomething
)那么可以不与true进行比较,但如果没有明确的命名就应该进行比较。如果它在if语句中显然可以与true进行比较。
if(monday)
与...一样具有描述性
if(monday == true)
我也喜欢不使用同样的标准:
if(!monday)
与...相对
if(monday == false)
if(foo)
{
}
更短,更简洁。如果完全不需要添加额外的检查,为什么要添加呢?这只会浪费计算资源...
尽管如此,我确实同意有时更冗长的语法可以使事情更易读(只要性能可接受),特别是在变量命名不好的情况下。
两种都是正确的。
你的公司可能有一些编码标准 - 确保遵循它。如果没有 - 你应该制定一个 :)
没有哪一个是“更正确”的。我个人更喜欢更简洁的形式,但两者都可以。对我来说,生命太短暂了,甚至不值得为这样的事情争论。
个人而言,我更喜欢
if(true == foo)
{
}
没有==/=错别字的机会,我发现在foo的类型方面更具表现力。 但这是一个非常主观的问题。
if (foo = true)
会产生编译时错误。 - ChrisF