便宜()&&昂贵()

时间:2011-08-13 15:00:21

标签: optimization

此评论是针对我询问优化问题而做出的。 “请注意,廉价()&& expensive()不是对具有短路评估的语言中的昂贵()&& cheap()的优化,除非你能保证昂贵()和便宜()都是副作用免费“

这是什么意思?

2 个答案:

答案 0 :(得分:4)

由于短路评估,当表达式expensive () && cheap()运行时,cheap()仅在expensive()返回true时运行。如果两个方法都是无副作用的,这意味着它们只是返回一个布尔值而进行任何更改应用程序状态,那么表达式可以反转为cheap() && expensive(),这将是更快,假设cheap()并非总是如此。

但是,在任何一种方法修改应用程序状态的情况下,反转表达式可能在功能上不相同。

答案 1 :(得分:1)

如果cheap()和/或昂贵()可能有副作用,那么在一种短路AND的语言中,改变顺序可以改变程序的语义,即,你只需通过改变它就可以获得不同的答案顺序。