bool foo = true;
// Do this?
if (foo)
{
}
// Or this?
if (foo == true)
{
}
我喜欢其中一个和我的同事另一个。结果是一样的,但更正确的是什么?
答案 0 :(得分:40)
我见过的几乎所有人都表达了意见
if (foo)
{
}
事实上,我看到很多人批评明确的比较,我甚至可能在此之前就这样做了。我会说“短”的风格是惯用的。
编辑:
请注意,这并不意味着代码行始终不正确。考虑:
bool? maybeFoo = GetSomeNullableBooleanValue();
if (maybeFoo == true)
{
...
}
那将编译,但没有“== true”它不会,因为没有从bool?
到bool
的隐式转换。
答案 1 :(得分:27)
这取决于你的情况。
我想说,如果你的博尔有一个好名字,那么:
if (control.IsEnabled) // Read "If control is enabled."
{
}
将是首选。
但是,如果变量的名称不那么明显,则检查true
将有助于理解逻辑。
if (first == true) // Read "If first is true."
{
}
答案 2 :(得分:12)
如果您要选择
if(foo == true)
为什么不一直走到
if(foo == true == true == true == true == true == true == true == true == true)
这是一回事。
我不同意,如果它的名字清楚(即:IsSomething
)那么它可以不与真实比较,但否则你应该。如果它在if语句中显然可以与真实比较。
if(monday)
与
一样具有描述性if(monday == true)
我也不喜欢相同的标准:
if(!monday)
而不是
if(monday == false)
答案 3 :(得分:3)
第一个例子几乎总是在我的书中获胜:
if(foo)
{
}
它更短更简洁。为什么在绝对不需要的时候添加额外的支票?只是浪费周期......
但是,我确实同意,在变量命名不佳的情况下,有时候更冗长的语法会使事情更具可读性(只要性能可以接受,这最终会更重要)。答案 4 :(得分:2)
两者都是正确的。
您的公司可能有一些编码标准 - 只需看一看即可。如果你没有 - 你应该:)
答案 5 :(得分:1)
我个人更喜欢
if(true == foo)
{
}
没有机会出现== / =错误类型,我发现它在foo类型方面更具表现力。 但这是一个非常主观的问题。
答案 6 :(得分:1)
两者都不“更正确”。我个人的偏好是更简洁的形式,但要么是好的。对我来说,生命太短暂,甚至无法考虑争论这样的事情。