为什么一种语言不使用 Short-circuit evaluation ?不使用它有什么好处吗?
我发现这可能会导致一些性能问题...是真的吗?为什么?
<小时/>最佳答案
不使用短路评估的原因:
因为如果您的函数、属性 Get 或运算符方法有副作用,它的行为会有所不同并产生不同的结果。这可能与:A) 语言标准,B) 您的语言的先前版本,或 C) 您的语言典型用户的默认假设相冲突。这些都是VB不短路的原因。
因为您可能希望编译器能够按照自己认为合适的方式自由地重新排序和修剪表达式、运算符和子表达式,而不是按照用户输入的顺序。这些是 SQL 的原因为了不短路(或者至少不像大多数接触 SQL 的开发人员所认为的那样)。因此,SQL(和其他一些语言)可能会短路,但前提是它决定这样做,而不一定按照您隐式指定的顺序。
我在这里假设您问的是“自动、隐式特定于顺序的短路”,这是大多数开发人员对 C、C++、C#、Java 等的期望。VB 和 SQL 都有方法显式< em>强制特定于订单的短路。然而,通常当人们问这个问题时,这是一个“按照我的意思做”的问题;也就是说,它们的意思是“为什么它不做我想要的事情?”,例如,按照我编写的顺序自动短路。
关于language-agnostic - 为什么语言不使用短路求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445867/