2011-08-29 35 views
1

我已經編程了很多年,但主要是在行業之外。我想盡一切努力來清理我的編程風格。編程風格:何時添加變量?

我一直在重新思考一些基本的想法,這是一個 - 什麼時候添加變量與合併/根據需要使用現有變量是否合適?

顯然,如果有一箇中間值需要重新使用,這將是一個很好的理由添加一個變量。但是,當我爲了可讀性而添加變量時,選擇並不明確。例如,在C++中,我可能有一個變量,它看起來像:

std::vector<std::map<char, float> > frequencies; 

如果我遍歷它,我可以訪問的東西值,就像這樣:

x = frequencies[i]['c'] 

我也可以介紹臨時變量:

std::map<char, float> curr_freq = frequencies[i]; 
x = curr_freq['c']; 

這是一個相當簡單的例子,但是你能想象更爲複雜的嵌套結構。我發現我沒有選擇一個或另一個的原則性基礎,當事情開始變得難以理解時,我會添加變量,否則不會,因爲我沒有這些決策的基礎,我的代碼很可能看起來不太一致。是否有一個更有原則的基礎來決定什麼時候增加變量是合適的?

+0

我會更進一步並命名類型。 'typedef std :: vector > frequencies_t'。然後只聲明'頻率_頻率'。然後最後'const frequencies_t :: value_type&curr_freq =頻率[i]'。如果有必要,可以更容易地更換容器。 (由於'auto',這對C++ 0x來說稍微有用,但是我個人覺得它更易於閱讀......) – Nemo

回答

0

什麼增加了代碼的可讀性是你應該做的。

其他人可能需要維護您的代碼。

而且,更重要的是,您可能需要維護您的代碼。

0

不存在 如果它是一個解釋器語言,並且有一個簡單的getter(我通常會避免),那麼我會使用一個變量來防止在運行時發生額外的閉包。

在C中,你需要在函數頂部定義變量,所以我會盡量保持它的最小值。在foreach($ items = $ i)或者foreach($ items = $ k => $ v)或者foreach(Object o:objectsArray)會全部創建的時候,你可以使用局部變量,只要代碼是可讀的,我就可以避免使用額外的變量,但是它也可以再次使用取決於語言,我會建議 - 使用OOP,簡短的方法/函數和添加註釋,以便代碼保持可讀性,並且只使用更多的變量,以便在需要時使其更易讀。最重要的 - 確保其他人可以理解你的代碼,多數民衆贊成你如何知道你都很好

1

我n您的具體情況,該行:

std::map<char, float> curr_freq = frequencies[i]; 

實際上將複製存儲在frequencies[i]map創建一個新的map對象。既然你只想索引你的容器,那麼做所有這些額外的拷貝似乎是浪費的。

如果你想引入一個臨時變量(使代碼更易讀等),但不希望創建額外的開銷,你可以只抓住一個指針/引用到你的數據結構:

std::map<char, float> &curr_freq = frequencies[i]; // grab reference, not a copy 
float x = curr_freq['c']; 

一般來說,通過使用描述性臨時變量等,儘可能使代碼儘可能易讀是很好的做法。通過使用引用/指針等,您通常可以在不增加額外成本的情況下執行此操作。

希望這會有所幫助。

+0

感謝您的更正。仍然在學習C++習語... – jda

+1

在這種情況下,也可以使它成爲'const'參考。 – Nemo

+0

@Nemo,這是不可能的,因爲通過operator []訪問地圖可以修改地圖。 – Mankarse

2

我使用了幾條簡單線條而不是一條COMPLEX線條。