首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么短路不是VB中的默认行为?

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

Stack Overflow用户
提问于 2009-01-28 07:03:22
回答 3查看 3.9K关注 0票数 15

VB有执行short-circuiting逻辑连接的运算符AndAlsoOrElse

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-28 07:09:44

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

如果短路是默认行为,则编译器将不正确地解释按位操作。

AndAlso和OrElse的歌谣由泛光中心

我们的第一个想法是,逻辑操作比按位操作更常见,因此我们应该创建和执行逻辑运算符,并添加名为BitAnd、BitOr、BitXor和BitNot的新位运算符(最后两种操作是为了完整性)。然而,在其中一个贝塔过程中,很明显,这是一个非常糟糕的主意。一个VB用户如果忘记了新操作符的存在、和使用,以及当他是指BitAnd和BitOr时,就会得到编译但会产生“坏”结果的代码。

票数 18
EN

Stack Overflow用户

发布于 2009-01-28 07:14:07

我不认为短路在任何情况下都是有用的。我只在需要的时候才用。例如,在检查两个不同和未连接的变量时,不需要:

代码语言:javascript
复制
  If x > y And y > z Then

  End If

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

代码语言:javascript
复制
  If x IsNot Nothing AndAlso x.Someproperty > 0 Then

  End If

因此,在我看来,这两种句法选择都是非常必要的。

票数 1
EN

Stack Overflow用户

发布于 2009-01-28 13:40:10

显式短路确保首先计算左操作数.

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/486722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档