哪个更好;声明&设置变量&打电话两次,或者两次动态计算价值?

时间:2009-08-27 09:20:06

标签: vba performance

哪种方法最有效?

Sub pvaSetWeek(Optional weekOffset As Long = 0)
    Dim theDayToday As Long

    theDayToday = Weekday(Now, vbMonday)

    'Set start to Monday
    Range("pvaStartDate") = Int(Now) - (theDayToday - 1) - (weekOffset * 7)

    'Set end to Sunday
    Range("pvaEndDate") = Int(Now) + (7 - theDayToday) - (weekOffset * 7)
End Sub

Sub pvaSetWeek(Optional weekOffset As Long = 0)    
    'Set start to Monday
    Range("pvaStartDate") = Int(Now) - (Weekday(Now, vbMonday)- 1) - (weekOffset * 7)

    'Set end to Sunday
    Range("pvaEndDate") = Int(Now) + (7 - Weekday(Now, vbMonday)) - (weekOffset * 7)
End Sub

为什么?

编辑添加:我通常采用第一种方式,因为它更容易阅读/调试,并且如果相同的值需要使用多次,显然可以更好地扩展,但是值可能只使用了几次我经常想知道是否有任何惩罚,无论多么小,以某种方式做事。

4 个答案:

答案 0 :(得分:2)

其他答案都很好。

我想指出的是,SO包含许多“Y比Y更有效吗?”这一形式的问题,比如“Is ++我比i ++更有效率吗?”或“内联函数调用是否更有效?”。答案是,最常见的是,正如一些撰稿人指出的那样,例如“理发减肥”。

当然它可能确实有所作为,但不要认为它会产生重大影响,直到你证明它在你的情况下

答案 1 :(得分:1)

第一种方法在可读性方面肯定更好。我更喜欢它。

在我看来,一个变量赋值不会是明显的开销。此外,您正在编写VBA而不是某些时间/关键任务处理器类型的汇编代码,这意味着您最大的担心应该是代码的可维护性,而不是微不足道的理论计算时间效率。

答案 2 :(得分:0)

这似乎是一个陈腐的答案......但你试过计时吗?如果没有“重大差异”*那么可以解决更易读/可维护的问题。

**我会留给你的。

答案 3 :(得分:0)

我认为有些“重构”可用。这个怎么样?

Sub pvaSetWeek(Optional weekOffset As Long = 0)  
  Dim TheDateToday as byte, lngRangeBase as Long, lngRangeStart As Long, lngRangeEnd As Long  
  TheDateToday = Weekday(Now, vbMonday)  
  lngRangeBase = (weekOffset * 7)  

  lngRangeStart =  - ((theDayToday - 1) - lngRangeBase )  
  lngRangeEnd =  (7 - theDayToday) - lngRangeBase  

  'Set start to Monday  
  Range("pvaStartDate") = Int(Now) + lngRangeStart  
  'Set end to Sunday  
  Range("pvaEndDate") = Int(Now) + lngRangeEnd  
End Sub