让我说我有这段代码:
age = 21;
allowedFromParents = false;
if (age >= 18 || allowedFromParents == true)
{
//go drink
}
当我调试这部分代码时,当它检查第一部分并且这是真的时,它就已经在语句中,而没有费心去检查另一个语句。
现在,这只是一个简单的条件,但是如果条件语句要大得多计算,那么在一个频繁的循环内,并且一个将比另一个更可能返回true。
那么条件的顺序对表现有影响吗?
答案 0 :(得分:4)
您所看到的被称为短路评估。
正如您所猜测的那样,条件语句的顺序可能会影响性能:如果其中一个太多计算得更重,而且它是在紧密循环中完成的,那么您可以考虑将另一个第一
然而,
过早优化是所有邪恶的根源 - DonaldKnuth
意味着除非您在此代码中有测量性能瓶颈,否则您应该记住它的可读性,而不是性能。
答案 1 :(得分:2)
是的,这很重要。如果第一个条件为真,那么它将停止评估其余条件。换句话说,可能不会评估右侧的条件。
逻辑OR运算符(||)返回布尔值true(如果有) 或者两个操作数都为true,否则返回false。操作数是 在评估之前隐式转换为bool类型,结果 是bool类型。逻辑OR具有从左到右的关联性。
https://msdn.microsoft.com/fi-fi/library/f355wky8(v=vs.120).aspx
答案 2 :(得分:1)
将需要更多时间的条件放在右边,这样如果左边的条件评估为真,那么第二个条件就不会被检查。
并且是的,如果你处于一个紧密的循环中,在最坏的情况下可以说一千次,那么它肯定会提高性能
答案 3 :(得分:0)
是的,这些陈述的优先级可能很重要,但不仅仅是性能。
在某些情况下,它可以用来缩短多个if语句。
例如:
if (patient == null || patient.age == 0)
{
//patient is invalid
}
我以前认为这只能和and-statements一起使用,但在这种情况下,除非患者不为空,否则它不会达到第二个语句。使其在可读性,性能方面更有效率,在我看来,对崩溃更安全。