哪个对性能更好?And vs AndAlso



在编写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_。

如果你有很多使用AndOr的代码,请小心,如果第二个条件涉及有副作用的函数调用,全局搜索和替换可能会改变现有行为。

我更喜欢使用AndAlsoOrElse,除非您特别需要And&Or

从C和C++背景进入VB(最初是V5(,VB的andor没有短路总是很烦人。因此,第二个表达式依赖于第一个表达式的情况总是很难写。

我预计大多数时候性能不会有太大的提高,除非第二个表达式有很大的开销,否则短路运算符将避免执行它,从而加快速度。

但是,如果第二个表达是一个巨大的开销,那么我会担心副作用,这种副作用有时只会发生;这将使未来的维护更加困难,并可能使正确性更难维护。

当条件也是函数时:

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。

最新更新