VB 有运算符AndAlso和OrElse,它们执行短路逻辑连接。
为什么这不是And和Or表达式的默认行为,因为短路在每种情况下都很有用。
奇怪的是,这与&&和||的大多数语言相反。进行短路。
因为 VB 团队必须保持与旧代码(和程序员!)的向后兼容性
如果短路是默认行为,则编译器会错误地解释按位运算。
Panopticon Central的AndAlso和OrElse民谣
我们的第一个想法是逻辑运算比位运算更常见,所以我们应该让 And 和 Or 成为逻辑运算符,并添加新的按位运算符 BitAnd、BitOr、BitXor 和 BitNot(最后两个是为了完整性)。然而,在其中一个测试版中,很明显这是一个非常糟糕的主意。忘记新运算符存在并使用 And的 VB 用户,当他指的是 BitAnd 和 Or 当他指的是 BitOr 时,他会得到编译但产生“坏”结果的代码。
我并不认为短路在每种情况下都有用。我只在需要时使用它。例如,在检查两个不同且未连接的变量时,不需要:
If x > y And y > z Then
End If
正如 Paul Vick 的文章所说明的(参见上面 Ken Browning 提供的链接),短路有用的完美场景是首先检查对象是否存在,然后评估其属性之一。
If x IsNot Nothing AndAlso x.Someproperty > 0 Then
End If
因此,在我看来,这两种语法选项都是非常需要的。
显式短路确保首先评估左操作数。
在 VB 以外的某些语言中,逻辑运算符可能会执行隐式短路,但可能会首先计算右运算符(例如取决于逻辑运算符左侧和右侧表达式的复杂性)。