在编写If语句时,我总是在需要时使用And
,如:
If 1=1 And 2=2 Then
我唯一一次使用AndAlso
的情况是,如果第一个不正确,第二个条件会出错:
If Not IsDbNull(Value) AndAlso Value=2 Then
但是,最近我听说AndAlso
的性能优于And
,因为第二个条件只有在第一个条件为真时才会被读取。
在这种情况下,我应该只使用AndAlso
吗?
答案 0 :(得分:36)
是的,AndAlso
可能比And
更快,因为如果之前的条件证明是错误的,它不会评估后续条件。
And
是早期版本的Visual Basic的回归
大多数(我毫不犹豫地说所有)现代语言都使用布尔运算符来表示不需要严格评估的短路条件。
e.g。 &&
C风格语言的运算符均为AndAlso
。
如果您有大量使用And
和Or
的代码,请注意,如果第二个条件涉及具有副作用的函数调用,则全局搜索和替换可以更改现有行为。< / p>
我希望使用AndAlso
和OrElse
,除非您明确要求And
&amp;提供的功能。 Or
答案 1 :(得分:4)
从C和C ++背景进入VB(最初是V5),VB的and
和or
没有短路,这总是令人讨厌。因此,第二个表达式依赖于第一个表达式的情况总是更难写。
我不希望在大多数情况下看到很多性能提升,除非第二个表达式有很大的开销,短路运算符将避免执行它,从而加快速度。
但是,如果第二个表达是一个重要的开销,那么我会关注有时只会执行的副作用 - 这将使未来的维护更加困难,并且可能使正确性难以维持。
答案 2 :(得分:3)
当条件也起作用时:
If functionA() And functionB() Then
...
public shared functionA() As Boolean
IF A is false THEN log -> return true or false
...
public shared functionB() As Boolean
IF B is false THEN log -> return true or false
在这里使用AndAlso
可能是错误的方法,因为当A和B都为假时它只会记录B.