2017-02-24 139 views
4

這是一個場景。何時創建局部變量以及何時調用對象方法?

對象A有一個接收對象的方法。 有2種方法。兩者都在做基本相同的事情。
randomCheck1()每次都會向isValid()方法發出調用。
randomCheck2()進行一次調用,然後每次使用本地變量。

Class A 
{ 
    randomCheck1(myObject obj) 
    { 
     if (obj.getInfo().isValid()) 
     { 
       : 
     } 

     // Do some more work. 
     if (obj.getInfo().isValid()) 
     { 
       : 
     } 

     // Do some more work. 
     if (obj.getInfo().isValid()) 
     { 
       : 
      } 

    } 

    randomCheck2(myObject obj) 
    { 
     boolean isValidCheck = obj.getInfo().isValid(); 
     if (isValidCheck) 
     { 
       : 
     } 
     // Do some more work. 
     if (isValidCheck) 
     { 
       : 
     } 

     // Do some more work. 
     if (isValidCheck) 
     { 
       : 
     } 
    } 
} 

這兩者之間是否存在性能差異?
是否有一個編碼標準,規定如果一個方法需要被調用多次,那麼應該創建一個局部變量?

+0

相關:https://stackoverflow.com/questions/39888446/is-it-better-to-call-a-method-on-a-variable-or-chain-it-to-the-constructor – 2017-02-24 12:55:23

+0

謝謝。很多很好的反饋。我相信這裏的關鍵在於潛在價值是否可能改變。 –

回答

0

你基本上有兩個問題,

1)是否有兩者之間的性能差異?

Ans - 這要看。它主要取決於你的方法是多麼沉重。如果您的方法正在執行一些重大計算來檢查對象的有效性,然後給出結果,那麼顯然最好調用一次該方法,然後重新使用它。

假設您的方法需要1ms來計算有效性並返回結果,那麼3次調用將花費3ms。但是您可以撥打一個電話並重新使用該值並節省2ms。

但是,如果方法IsValid()是在計算方面非常簡單,再有就是兩者之間沒有性能差異。

2)是否有其中規定,如果一個方法需要被調用一次,然後一個局部變量應該創造更多的編碼標準?答案 - 這不是一成不變的規則,但調用一次方法總是更清晰,獲取其值並將其存儲在一個變量中,然後在任何需要的時候重新使用它。

但請記住,如果isValid()方法的結果隨時間變化,那麼您需要多次調用它。假設你第一次稱它爲真,但你在1秒後調用它,它會給你錯誤的,那麼在這種情況下,你不能存儲該值,並在值改變時重新使用它。你需要多次調用它。

+0

不要讓我知道是否有其他任何你需要知道的。如果這個答案可以幫助你,請考慮把它搞好。 –

0

當你只有一個值來測試時,品味的問題。 如果您必須考慮多個值或在兩個或更多階段中一致地執行操作,最好保留一個局部變量。爲了性能的觀點,我猜如果jit可以「inline」isValid,如果它是一個簡單的字段返回,但這是次要的,因爲與專用於事件處理的執行時間相比,這並不是真正的麻煩。 在相反的方向上,如果getInfo或isValid需要大量時間,那更明顯的是您應該避免將它們調用超過必要的次數。

0

隨機檢查2是最好的選擇,特別是當isValid()函數在每個調用中執行大量工作時。

0

其實這取決於業務方案也使用哪一個:

  • 價值obj.getInfo()的isValid()或obj.getInfo()的 執行的過程中改變方法,然後使用第一種方法(例如:如果調用isValid()它每次都從db中獲取值並且是可變的)。
  • 如果obj.getInfo()的值。isValid()的是方法的執行使用二者中的任何期間是恆定的,雖然第二個可讀
  • 如果考慮性能點,則這取決於有多少時間的isValid()方法正在。如果花費的時間很少,那麼它就不會有任何區別。
相關問題