
if statement condition optimisation我有一个带两个条件的if语句(由OR运算符分隔),其中一个条件覆盖了70%的情况,并且处理/执行所需的时间比第二个条件少得多,因此仅出于速度I的考虑如果第一个条件评估为false,则希望处理第二个条件。 如果我对条件进行排序,以便第一个条件(较快的条件)首先出现在if语句中-在满足此条件并评估为true的情况下,是否还要处理第二个条件?
还是我需要嵌套两个if语句以仅在第一个条件为false时才检查第二个条件?
我正在使用PHP,但是我认为这可能与语言无关。 对于C,C,C#,Java和其他.NET语言,布尔表达式进行了优化,以便一旦知道足够多的内容,就不会对其进行评估。 执行混淆代码的一个老技巧是使用它来创建if语句,例如:
如果" a"为真,则" b()"将永远不会被求值,因此我们可以将其重写为:
,类似地:
将成为
请注意,这仅对||有效和 n 几乎每种语言都进行短路评估。意味着仅在绝对必要时才评估第二个条件。为此,大多数语言都使用双管道||,而不是单管道|。 请参阅http://en.wikipedia.org/wiki/短路评估 n n n n n n 在大多数经过适当优化的语言中,前者可以正常工作。 因为这是与语言无关的标签,所以我会介绍一下。至少对于Perl来说,第一种选择就足够了,我对PHP并不熟悉。它从左到右求值,并在满足条件时退出。 |