2015-09-05 61 views
3

我正在使用VBA,我在问这个问题以优化我的代码。我有这样的事情Excel看起来有多失败If语句?

If reallySmallMethod() And reallyBigMethod() then 
    'Do some awesome code 
End If 

所以我把reallySmallMethod()reallyBigMethod()之前,因为我想通的Excel将跳过大单如果小一个失败。但是,当我放置一个断点并逐句通过这个if语句时,似乎无论如何Excel都会运行大方法,即使小方法失败。它是否正在寻找Or

所以,现在我已经做到了这一点,以优化其

If reallySmallMethod() then 
    If reallyBigMethod() then 
     'do some awesome code 
    End If 
End If 

实际上,它看起来像这样的代码是更快,当我在“休息模式”是工作,但我不知道。

谢谢!

回答

4

你的问题通常被称为短路(布尔)评估(与渴望评估)。请参阅https://en.wikipedia.org/wiki/Short-circuit_evaluation。仅供参考,此属性通常以语言(短路或急切)定义,而不是编译器允许执行的优化。 VBA没有它,换句话说,它的布尔运算符被定义为渴望。您必须编写两个嵌套的If语句才能达到所需的效果。

可以注意到,短路布尔运算符通常产生比程序员更期望的结果。例如,当意图绕过&&运算符右侧的数组索引时,当我使用短路算子超出数组范围时,条件表达式i < array.length && array [i] ...将很好地工作。然而,即使表观界限检查失败,具有渴望的布尔操作的语言仍将评估右手表达式。根据维基百科记录,某些语言定义布尔运算符的短路和渴望版本,例如, Visual Basic .NET - 当然,不要与VBA混淆。