15

VB 有运算符AndAlsoOrElse,它们执行短路逻辑连接。

为什么这不是AndOr表达式的默认行为,因为短路在每种情况下都很有用。

奇怪的是,这与&&||的大多数语言相反。进行短路。

4

3 回答 3

18

因为 VB 团队必须保持与旧代码(和程序员!)的向后兼容性

如果短路是默认行为,则编译器会错误地解释按位运算。

Panopticon Central的AndAlso和OrElse民谣

我们的第一个想法是逻辑运算比位运算更常见,所以我们应该让 And 和 Or 成为逻辑运算符,并添加新的按位运算符 BitAnd、BitOr、BitXor 和 BitNot(最后两个是为了完整性)。然而,在其中一个测试版中,很明显这是一个非常糟糕的主意。忘记新运算符存在并使用 And的 VB 用户,当他指的是 BitAnd 和 Or 当他指的是 BitOr 时,他会得到编译但产生“坏”结果的代码。

于 2009-01-28T07:09:44.293 回答
1

我并不认为短路在每种情况下都有用。我只在需要时使用它。例如,在检查两个不同且未连接的变量时,不需要:

  If x > y And y > z Then

  End If

正如 Paul Vick 的文章所说明的(参见上面 Ken Browning 提供的链接),短路有用的完美场景是首先检查对象是否存在,然后评估其属性之一。

  If x IsNot Nothing AndAlso x.Someproperty > 0 Then

  End If

因此,在我看来,这两种语法选项都是非常需要的。

于 2009-01-28T07:14:07.280 回答
0

显式短路确保首先评估左操作数。

在 VB 以外的某些语言中,逻辑运算符可能会执行隐式短路,但可能会首先计算右运算符(例如取决于逻辑运算符左侧和右侧表达式的复杂性)。

于 2009-01-28T13:40:10.260 回答