为什么';t使操作员短路为默认值

本文关键字:操作员 短路 默认值 为什么 | 更新日期: 2023-09-27 18:22:38

考虑到一个典型的编码咒语是"不要在方法调用中引发副作用",而不使用短路运算符的唯一原因(我不知道,如果我错了,请告诉我)是当你依赖于后续代码中方法调用的副作用时。为什么C#和VB.NET等语言中的默认运算符不是短路版本?

IE:

 if (Method1() & Method2()) {
 }
 if Method1 And Method2 then
 End if
 if (Method1() | Method2()) {
 }
 if Method1 Or Method2 then
 End if

实际上(默认情况下)意味着

 if (Method1() && Method2()) {
 }
 if Method1 AndAlso Method2 then
 End if
 if (Method1() || Method2()) {
 }
 if Method1 OrElse Method2 then
 End if

为什么';t使操作员短路为默认值

我认为有两个不同的原因和两个不同答案。

对于C#(以及大多数相关的旧语言),单符号或单管道实际上对变量执行逐位操作(与逻辑相反)。这就是为什么在所有C/C++代码中,当有人想要逻辑和时,你会在他们的代码中看到双符号。

对于VB.NET我相信答案只是历史。Legacy Basic语言总是使用"answers"和"或"来进行非短路操作。这是一个非常糟糕的决定,但它一直被带到VB.NET.

值得一提的是,所有Basic语言都使用"和/或"关键字进行逐位操作。在旧的Basics中,AndAlso或OrElse关键字没有等价物来强制短路,所以你必须嵌套If语句来获得短路和的逻辑等价物。