为何Kotlin标准库的and、or中缀函数不支持短路求值?
Kotlin中
and/or中缀函数与&&/||运算符的差异原因 在此布尔值与[other]布尔值之间执行逻辑
and操作。与&&运算符不同,此函数不执行短路求值。this和[other]总是会被求值。
你之前以为and/or只是&&/||的语法糖,其实两者核心差异就在短路求值上,设计这两组不同操作,本质是为了覆盖不同的编程场景需求:
- 短路求值的
&&/||:日常开发里用得最多,比如写if (a != null && a.isValid()),如果a是null,后面的a.isValid()就不会执行,既能避免空指针,还能省去不必要的计算开销。 - 非短路的
and/or:有些场景下必须让左右两边的表达式都执行,不管前面的结果是什么。比如需要同时触发两个副作用(记录日志、更新状态):val result = logCheck1() and logCheck2(),这里不管logCheck1()返回true还是false,logCheck2()都会被调用,and就刚好能满足这种需求。
另外从语法层面看,&&/||是运算符,而and/or是中缀函数,这也让它们的使用场景略有差异:中缀函数可以让某些链式逻辑的代码更易读,比如在布尔表达式组合中,a and b or c的写法比嵌套运算符更直观(当然要注意优先级问题)。
内容的提问来源于stack exchange,提问作者Alejandro Lorefice
相关产品推荐
相关产品推荐

