在编写If语句时,我总是在需要时使用And
,如:
If 1=1 And 2=2 Then
我唯一一次使用AndAlso
是,如果第一个条件不成立,第二个条件是否会出错,比如:
If Not IsDbNull(Value) AndAlso Value=2 Then
然而,最近我听说AndAlso
的性能比And
好,因为只有当第一个条件为真时才读取第二个条件。
在这种情况下,我是否应该始终只使用AndAlso
?
是的,AndAlso
可能比And
更快,因为如果先前的条件被证明为false,它不会评估后续条件。
And
是对Visual Basic早期版本的回归
大多数(我不太愿意说所有(现代语言都使用布尔运算符来缩短不需要严格评估的条件。
例如CCD_ 9,C风格语言的和运算符都作为CCD_。
如果你有很多使用And
和Or
的代码,请小心,如果第二个条件涉及有副作用的函数调用,全局搜索和替换可能会改变现有行为。
我更喜欢使用AndAlso
和OrElse
,除非您特别需要And
&Or
从C和C++背景进入VB(最初是V5(,VB的and
和or
没有短路总是很烦人。因此,第二个表达式依赖于第一个表达式的情况总是很难写。
我预计大多数时候性能不会有太大的提高,除非第二个表达式有很大的开销,否则短路运算符将避免执行它,从而加快速度。
但是,如果第二个表达是一个巨大的开销,那么我会担心副作用,这种副作用有时只会发生;这将使未来的维护更加困难,并可能使正确性更难维护。
当条件也是函数时:
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都为false时,它只会记录B。