簡體   English   中英

反復呼喚 - 編碼實踐

[英]repeated calling - coding practice

你更傾向哪個? (當然getSize不做任何復雜的計數,只返回成員值)

void method1(Object & o)
{
    int size = o.getSize();

    someAction(size);
    someOtherAction(size);
}

要么

void method2(Object & o)
{
    someAction(o.getSize());
    someOtherAction(o.getSize());
}

我知道我可以測量哪一個更快但我想要一些評論......不只是執行時間相關...例如。 如果你更喜歡method2,你最多使用o.getSize多少次,你使用method1方式的數字是多少? 任何最佳做法? (想象甚至不同類型然后int)TY

我會選擇方法1,不僅因為它可能稍微快一點,而且主要是因為這意味着我不必擔心被調用的方法是否有任何副作用。

此外,如果在多線程程序中調用它,這可以確保我總是使用的大小值 - 否則它可能在兩次調用之間發生了變化。 當然,在某些情況下,您可能明確地想要注意到該更改,在這種情況下使用方法2。

(是的,根據其他答案,將size設為const int以確保在通過引用其他內容傳遞時不會修改它)。

由於您不希望在調用someAction()someOtherAction()時更改size (因為它不是函數的返回值時),請考慮:

void method3(const Object& o)
{
    const int size = o.getSize();

    someAction(size);
    someOtherAction(size);
}

getSize()可能很簡單,或者可能正在進行昂貴的計算。 此外, o的大小可能會被調用someAction()someOtherAction()之間的另一個線程更改。

我更喜歡第一種方法。 重復調用函數對我來說似乎並不好,特別是如果返回的值每次都相同。 第一種方法還避免了重復調用函數的開銷。

當我調用一個多次返回多次(大約2-3次)的函數時,我通常將返回的值保存在局部變量中。 那是因為我更喜歡節目速度而不是節省內存。 不是說記憶不重要。 這取決於具體情況。 調用一個不需要花費大量時間執行的函數並不費時,但是多次調用多個循環的函數會使程序進入長時間等待狀態。

第一個將消除對函數的不必要的調用,因此我更喜歡method1(),因為代碼看起來也更清晰。

但是,您應該知道,根據上下文,它們可能會產生不同的結果。 比如,如果someAction()中的大小發生變化,並且您使用存儲在size變量中的值,則可能無法獲得所需的結果。

當結果不會改變時反復調用任何函數是一種浪費,所以我總是采用第一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM