此评论是针对我询问优化问题而做出的。 “请注意,廉价()&& expensive()不是对具有短路评估的语言中的昂贵()&& cheap()的优化,除非你能保证昂贵()和便宜()都是副作用免费“
这是什么意思?
答案 0 :(得分:4)
由于短路评估,当表达式expensive () && cheap()
运行时,cheap()
仅在expensive()
返回true时运行。如果两个方法都是无副作用的,这意味着它们只是返回一个布尔值而不进行任何更改应用程序状态,那么表达式可以反转为cheap() && expensive()
,这将是更快,假设cheap()
并非总是如此。
但是,在任何一种方法修改应用程序状态的情况下,反转表达式可能在功能上不相同。
答案 1 :(得分:1)
如果cheap()和/或昂贵()可能有副作用,那么在一种短路AND的语言中,改变顺序可以改变程序的语义,即,你只需通过改变它就可以获得不同的答案顺序。