良好的编程习惯 - 更有效率?

时间:2013-05-28 12:12:35

标签: performance lua

我发现自己的编程功能比迭代编程更多,并且经常编写重复计算的函数。例如,

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

我理解这种情况的差异可能是微不足道的,但我有兴趣从一开始就养成良好的习惯,随着事情的堆积和复杂化,差异可能相当大。

2 个答案:

答案 0 :(得分:2)

如果您不止一次需要计算结果(函数的返回值),那么将它存储在变量中而不是重新计算它几乎总是一个好主意。特别是如果功能非常复杂,因此需要很长时间才能避免计算召回,以提高性能。

答案 1 :(得分:2)

一旦你开始获得细节,这个问题会变得非常有趣。在某些条件下,您提供的每个代码示例都可能比另一个更有效。在

的情况下
something(a) - another(a) - yetanother(a)

总是小于或等于零第一个代码样本会稍微提高效率,因为你避免赋值给变量,所以数字永远不会离开用于计算的寄存器。

但是,如果该语句大于零,那么第二个代码示例的效率要高得多,因为您要避免3个完整的函数调用,这些函数调用至少需要使用变量和返回来设置堆栈帧。如果你的功能比O(1)效率差,那么差异会更加明显。

如果有人想用不同效率等级的某些功能进行速度测试,我会对结果感兴趣,这应该有助于说明我的观点。