2016-06-08 44 views
-1

我見過這個問題很多次,但以不同的方式,答案從來沒有我一直在尋找。我確信我可以做一些測試,但我覺得這可能是一個很好的資源給其他人,也許會在這件事上得到一些意見。重複使用類別變量或創建新的局部變量?


這是問題:我有一個實現配置接口的類。每個繼承的方法通常都有一個變量。最常見的是通用的對象

如果反覆調用這些方法,創建每次調用方法時都會覆蓋的臨時類級變量,還是每次創建一個新變量會更有效?

尤其是在循環過程中。我通常儘量將所有變量保留在本地,但最近我正在使用的程序員做了相反的事情,並更改了我的一些代碼,因爲如果我需要進行修改,將來可能會更容易對其進行更改。


如果這是混亂的,這裏是我的意思的例子:

// Reused Local Variable 
private Object tempObject; 

public char getChar(String key) { 
    tempObject = get(key); /* method that grabs and object from a map */ 

    // more code... 
} 


// Recreated Local Variable 
public char getChar(String key) { 
    Object tempObject = get(key); 

    // more code... 
} 

請不要將此標記爲重複的問題。這個問題有很多,但它們都有不同的答案,這些答案大不相同。

我做了我的研究,所以不要說我沒有。 (在這個網站上似乎是一個巨大的問題,你不能再得到任何幫助,因爲人們如此快速地標記帖子,甚至沒有閱讀它們,因爲它們與其他帖子相似)。

這些答案:here,陳述如果你想重新格式化你的代碼,你會無緣無故地爲自己做更多的工作。而這取決於編譯器,它可能會自動將代碼重構爲最佳用法。但是如果有多個用戶在不同的編譯器上編譯代碼,則一個構建可能更多。

這些答案:here,似乎談論只是在一個單一的方法重用一個變量。或者將變量重用於不同的值或類型的值。如果該值做了與第一個值不同的值,它應該有自己的名字。除非所述變量的命名是通用的並且可以用於不同的事物。 Integer'i'可能不是最好的重用,因爲它很常見,可以在其他可能導致衝突的地方使用。只要您投入的價值是相關且兼容的,就可以重用「分數」之類的內容。

+0

有趣的是,人們不想幫忙,甚至不想提出任何建議。相反,他們只是投票選題和/或報告。這個網站真棒。愛這裏所有有幫助的人。 –

回答

0

我打算稍微重申一些前面提到的問題的答案。爲了可維護性,請使用局部變量。

如果使用本地變量,那麼任何人編輯或調試代碼(包括你自己,從現在幾個月)會立即知道只有代碼getChar()方法可以改變的tempObject值。這是一個有用的事情要知道。

另一方面,如果將其定義爲實例變量,則情況會複雜得多。假設您正在考慮將getChar方法調用爲另一種實例方法(我們稱之爲foo)。然後,突然之間,您必須花時間計算foo依賴於還是,值爲tempObject。並且foo調用是否有任何方法更改它。等等......

還有很多其他類似的問題可能出現。而且我甚至沒有遇到線程問題。

使用局部變量非常明確的人誰讀在未來的代碼完全這是怎麼回事 - 這是只有在這裏使用。如果你把它變成一個實例變量,每個人都必須停下來思考它。