提问人:Alejandro Lorefice 提问时间:6/14/2023 更新时间:6/14/2023 访问量:75
为什么 kotlin-stdlib 中的 AND 和 OR 中缀函数不会短路为 && 和 ||?
Why does AND and OR infix functions from kotlin-stdlib don't short-circuit as && and ||?
问:
我注意到 kotlin-stdli 的中缀函数和中缀函数都有这个 javadoc:and
or
Performs a logical `and` operation between this Boolean and the [other] one. Unlike the `&&` operator, this function does not perform short-circuit evaluation. Both `this` and [other] will always be evaluated.
我很好奇它背后的原因,因为在我看来,这只是一个语法糖,但事实证明事实并非如此 🤔&&
||
答:
3赞
Tenfour04
6/14/2023
#1
这是因为有时需要不短路。这些函数的全部意义在于提供一种在不短路的情况下逻辑组合布尔值的方法。
提供一种替代语法来做同样的事情是违反 Kotlin 设计原则的,因为这会使语言总体上更难阅读:没有功能优势,但需要更多的基础知识才能在不查找函数或语法文档的情况下阅读代码。
3赞
broot
6/14/2023
#2
除了@Tenfour04的答案之外,请注意,在这种情况下短路在技术上是很棘手的。 是一个函数,如果不传递两个参数,我们就无法调用它。Kotlin 编译器必须识别此特定函数,并使用自定义字节码将其内联以允许短路。and()
评论
2赞
Tenfour04
6/14/2023
好点子。编译器对“原始”类的许多功能以及 for 循环中使用的范围执行此类操作,但绝不会违反逻辑规则或代码执行顺序。如果这被编译器解释为短路,它将坚决破坏代码执行顺序的规则。
评论