VB具有运算符AndAlso和OrElse,用于执行短路逻辑连接。
为什么这不是和以及或表达式的默认行为,因为短路在每种情况下都很有用。
奇怪的是,对于&& 和 || 执行短路的大多数语言来说,相反。
答案 0 :(得分:18)
因为VB团队必须保持与旧代码(和程序员!)的向后兼容性
如果短路是默认行为,编译器会错误地解释按位操作。
Panopticon CentralWhy 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以外的某些语言中,逻辑运算符可能会执行隐式短路,但可能首先评估正确的运算符(具体取决于逻辑运算符左侧和右侧表达式的复杂性)。