我有时在youtube上看到人们只写
if(something) { ...; }
而不是
if(something == true) { ...; }
使用这样的if语句的规则是什么?这是因为if语句默认检查某个内容是否为真吗?
它只是用于检查括号之间的条件是true还是false。
if(something == true) {}
在大多数情况下与,阅读下面我为什么使用单词most
相同。
if(something) {}
我个人不认为添加== true
会使它更可读。所以我倾向于使用if(something)
。我会选择你们团队使用的。单独编程?选一个你最喜欢的。
附加:当检查条件是否为假时,您可以使用:
if(!something) {}
注:
来自diemaus的答案:
虽然Max的答案是正确的,但我想补充一些内容。而如果(booleanVariable==true)和if(booleanCariable)通常是完全一样,你没有考虑Nullable还是布尔?用于速记。
对于bool
值,它是相同的。。。但请注意:
// Note the name of the class (Nomen est omen)
public class InsaneClass
{
public static implicit operator bool(InsaneClass v)
{
Console.WriteLine("Operator bool");
return true;
}
public static bool operator==(InsaneClass v1, bool v2)
{
Console.WriteLine("Operator ==");
return true;
}
public static bool operator !=(InsaneClass v1, bool v2)
{
Console.WriteLine("Operator !=");
return true;
}
}
然后
var ic = new InsaneClass();
if (ic)
{
// Operator bool
}
if (ic == true)
{
// Operator ==
}
:-)
但是,通常情况下,你不应该让implicit operator bool
过载,除非你真的知道自己在做什么!(注意,您可以通过重载operator true
加上implicit operator InsaneClass(bool)
和operator==(InsaneClass, InsaneClass)
来获得其他有趣的结果)。。。这表明Java没有运算符重载至少有一个原因:-)
虽然Max的答案是正确的,但我想添加一些内容。虽然if (booleanVariable == true)
和if (booleanVariable)
通常是完全相同的东西,但您没有将Nullable<bool>
或bool?
作为简写。
考虑一下:
var nb = (bool?)true;
然后:
if (nb) // this is a syntax error
{
// [...]
}
鉴于:
if (nb == true) // this is a NOT an error.
{
// [...]
}
然而,可为null的bools并不是最常见的事情。
一般来说,只需编写if (booleanValue)
,因为它看起来更干净。对于返回布尔值的所有操作都是一样的。
在我的书中,if (book.HasPages())
比if (book.HasPages() == true)
更可读(无意双关)
如果某个东西的类型是bool,而不是某个隐式转换为bool的类型,那么两者的结果将是相同的——if语句至少由两部分组成
- 条件
- 满足条件时要执行的主体(也称为true
在第一个例子中,条件是一个简单的表达式,即something
,因此如果某个值为true,则执行if语句的主体。
在第二个示例中,表达式稍长something == true
,这是一个二进制比较。它将检查两侧的值是否相等,在这种情况下,它的计算结果为true
,如果我们写出,它们的计算结果不为false
- 当某事为true时,表达式为
true == true
,并计算为true - 当某物为false时,表达式为
false == true
,并计算为false
换句话说,较长的表达式将始终计算为something
的值,但它使用冗余比较来获得结果。