我正在使用VBA,我正在问这个问题,以便优化我的代码。我有类似的东西
$0
所以我把If reallySmallMethod() And reallyBigMethod() then
'Do some awesome code
End If
放在reallySmallMethod()
之前,因为我认为如果小的那个失败,Excel会跳过那个大的。但是当我放置一个断点并逐步执行这个if语句时,Excel似乎运行了大方法,即使小方法失败了。它是在寻找reallyBigMethod()
吗?
所以现在我已经做了这个来优化它
Or
当我在'休息模式'工作时,看起来这段代码似乎更快,但我不确定。
谢谢!
答案 0 :(得分:4)
您所询问的通常称为短路(布尔)评估(与急切评估相比)。见https://en.wikipedia.org/wiki/Short-circuit_evaluation。仅供参考,此属性通常以语言(短路或急切)定义,而不是允许编译器执行的优化。 VBA没有它,换句话说,它的布尔运算符被定义为渴望。您必须编写两个嵌套的If语句才能达到预期的效果。
可以注意到,短路布尔运算符通常会产生比程序员更渴望的结果。例如,当使用短路运算符超出数组边界时,当意图绕过i < array.length && array [i] ...
运算符右侧的数组索引时,&&
的条件表达式将很好地工作。但是,即使明显的边界检查失败,具有急切布尔操作的语言仍将评估右手表达式。
正如维基百科所指出的,一些语言既定义了短路又定义了布尔运算符的急切版本,例如: Visual Basic .NET - 当然不要与VBA混淆。