我发现自己的编程功能比迭代编程更多,并且经常编写重复计算的函数。例如,
function DoThis(a)
if something(a) - another(a) - yetanother(a) > 0 then
return something(a) - another(a) - yetanother(a)
else
return 0
end
end
我做了很多,如果结果不会被使用超过几次。通常,将计算分配给变量是否更有效?
function DoThis(a)
local x = something(a) - another(a) - yetanother(a)
if x > 0 then
return x
else
return 0
end
end
我理解这种情况的差异可能是微不足道的,但我有兴趣从一开始就养成良好的习惯,随着事情的堆积和复杂化,差异可能相当大。
答案 0 :(得分:2)
如果您不止一次需要计算结果(函数的返回值),那么将它存储在变量中而不是重新计算它几乎总是一个好主意。特别是如果功能非常复杂,因此需要很长时间才能避免计算召回,以提高性能。
答案 1 :(得分:2)
一旦你开始获得细节,这个问题会变得非常有趣。在某些条件下,您提供的每个代码示例都可能比另一个更有效。在
的情况下something(a) - another(a) - yetanother(a)
总是小于或等于零第一个代码样本会稍微提高效率,因为你避免赋值给变量,所以数字永远不会离开用于计算的寄存器。
但是,如果该语句大于零,那么第二个代码示例的效率要高得多,因为您要避免3个完整的函数调用,这些函数调用至少需要使用变量和返回来设置堆栈帧。如果你的功能比O(1)效率差,那么差异会更加明显。
如果有人想用不同效率等级的某些功能进行速度测试,我会对结果感兴趣,这应该有助于说明我的观点。