为什么短路不是VB中的默认行为?

时间:2009-01-28 07:03:22

标签: vb6 operators language-design short-circuiting

VB具有运算符AndAlsoOrElse,用于执行短路逻辑连接。

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

奇怪的是,对于&& || 执行短路的大多数语言来说,相反

3 个答案:

答案 0 :(得分:18)

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

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

Panopticon Central

Why did we introduce AndAlso and OrElse?

  

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

答案 1 :(得分: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

所以,在我看来,非常需要两种语法选项。

答案 2 :(得分:0)

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

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