VB有执行short-circuiting逻辑连接的运算符AndAlso和OrElse。
为什么这不是和以及或表达式的默认行为,因为短路在每种情况下都很有用。
奇怪的是,这是与相反的,它与&&和欧元/进行短路的大多数语言相反。
发布于 2009-01-28 07:09:44
因为VB团队必须保持与旧代码(和程序员)的向后兼容性!
如果短路是默认行为,则编译器将不正确地解释按位操作。
AndAlso和OrElse的歌谣由泛光中心
我们的第一个想法是,逻辑操作比按位操作更常见,因此我们应该创建和执行逻辑运算符,并添加名为BitAnd、BitOr、BitXor和BitNot的新位运算符(最后两种操作是为了完整性)。然而,在其中一个贝塔过程中,很明显,这是一个非常糟糕的主意。一个VB用户如果忘记了新操作符的存在、和使用,以及当他是指BitAnd和BitOr时,就会得到编译但会产生“坏”结果的代码。
发布于 2009-01-28 07:14:07
我不认为短路在任何情况下都是有用的。我只在需要的时候才用。例如,在检查两个不同和未连接的变量时,不需要:
If x > y And y > z Then
End If正如Paul的文章所说明的(参见上文Ken提供的链接),短路有用的完美场景是,首先检查对象是否存在,然后对其属性之一进行评估。
If x IsNot Nothing AndAlso x.Someproperty > 0 Then
End If因此,在我看来,这两种句法选择都是非常必要的。
发布于 2009-01-28 13:40:10
显式短路确保首先计算左操作数.
在VB以外的一些语言中,逻辑运算符可以执行隐式短路,但可以首先计算右操作符(例如,取决于逻辑运算符左侧和右侧表达式的复杂性)。
https://stackoverflow.com/questions/486722
复制相似问题