我有一个带有两个条件的if语句(由OR运算符分隔),其中一个条件覆盖了+ 70%的情况,并且处理/执行的时间远远少于第二个条件,所以为了速度,我只想要如果第一个条件的计算结果为false,则处理第二个条件.
如果我订购条件,以便第一个条件(更快的条件)首先出现在if语句中 - 在满足此条件的情况下并且评估为真是第二个条件甚至处理?
if ( (condition1) | (condition2) ){ // do this }
或者我是否需要嵌套两个if语句来仅检查第二个条件,如果第一个条件评估为false?
if (condition1){ // do this }else if (condition2){ // do this }
我在PHP工作,但是,我认为这可能与语言无关.
对于C,C++,C#,Java和其他.NET语言,布尔表达式已经过优化,因此只要知道其他内容,就不会评估任何其他内容.
做混淆代码的一个老技巧是用它来创建if语句,例如:
a || b();
如果"a"为真,则"b()"永远不会被评估,因此我们可以将其重写为:
if(!a) b();
同样地:
a && b();
会成为
if(a) b();
请注意,这仅适用于|| 和&&运算符.两个运营商| 和&是按位或,和,并且因此不是"优化的".
编辑:正如其他人所提到的,尝试使用短路逻辑优化代码很少花费时间.
首先要明确,因为它更容易阅读和理解.此外,如果你试图过于聪明,对术语的简单重新排序可能会导致完全不同的行为而没有任何明显的原因.
其次,进行优化,但只能在计时和分析之后.太多的开发人员在没有分析的情况下进行过早优化.大多数时候它完全没用.