如何寫出容易被閱讀和理解的代碼?

2012-02-02 09:17:13來源:知乎作者:莊表偉

代碼易于維護(hù),分為兩個(gè)方面:容易閱讀理解;容易修改擴(kuò)展。

代碼易于維護(hù),分為兩個(gè)方面:容易閱讀理解;容易修改擴(kuò)展。

如何寫出容易被閱讀和理解的代碼?

1. 最根本的一條,要向?qū)懳恼聦W(xué)習(xí),有目錄,有大綱,有標(biāo)題,有段落,有適當(dāng)?shù)奶崾尽?/strong>

1.1. 首先是目錄結(jié)構(gòu),這個(gè)在一些比較好的實(shí)踐中,有約定俗成,比如Rails應(yīng)用,app目錄下一定分controllers、models、views、helpers四個(gè)目錄。再加上config、lib、vender,大致的代碼在哪個(gè)位置,不用猜都知道。

越是常見的項(xiàng)目類型,越是應(yīng)該按照約定俗成來構(gòu)建項(xiàng)目的目錄結(jié)構(gòu),不要?jiǎng)e出新裁。

對(duì)于沒有業(yè)內(nèi)參考的項(xiàng)目,目錄結(jié)構(gòu)也盡可能采用簡(jiǎn)單、易懂、含義固定明確的單詞,比如:core、config、test這樣的命名。

1.2. 包名與文件名,在這方面,java語言的規(guī)范非常值得其他語言參考和借鑒,分層組織,合理命名。是最重要的。

1.3.一個(gè)源代碼文件里,要不要有注釋?我認(rèn)為,盡可能不要,還是要像寫文章一樣,讓人閱讀起來,有感覺。比如:文件名,類名,方法/函數(shù)名。如果將所有的實(shí)際代碼全部折疊起來,順序的閱讀這些名字,能不能讓閱讀者,對(duì)于這一個(gè)源文件的內(nèi)容和目的,有大概的了解?

再?gòu)?qiáng)調(diào)一次順序閱讀,一個(gè) 源程序文件內(nèi)有很多個(gè)函數(shù)/方法,這些方法的排列次序,是有意義的。僅僅依靠調(diào)整次序,比如:構(gòu)造函數(shù),擴(kuò)展構(gòu)造函數(shù),簡(jiǎn)單的讀寫函數(shù),業(yè)務(wù)相關(guān)的函數(shù)。以這樣的次序來排列,會(huì)更加便于閱讀。

在必須寫注釋的地方,也不要寫得太多,言簡(jiǎn)意賅,把要點(diǎn)用1.2.3.講清楚。

1.4. 變量名,常數(shù)名,我們必須一再一再的強(qiáng)調(diào)命名的重要性,可以說,命名是軟件開發(fā)中,頭等重要的大事。要簡(jiǎn)潔、清晰、全英文(決定不要漢語拼音、任意縮寫)、盡可能不要夾雜數(shù)字,比如var1、var2這樣的變量名,就是最糟糕的。

2. readme

在項(xiàng)目開發(fā)的過程中,定期整理一份readme,放在項(xiàng)目的根目錄,主要包含兩部分內(nèi)容:我們的代碼做了些什么?如何查找我們寫的代碼。

3. wiki

團(tuán)隊(duì)開發(fā),盡可能維護(hù)一份wiki,自己架一個(gè)mediawiki或者其他wiki,都是很簡(jiǎn)單的;蛘咦约杭芤粋(gè)redmine這樣的集成項(xiàng)目管理工具,該有的就都有了。

wiki的管理維護(hù)是一個(gè)很大的話題,這里就不再展開了。

4. 單元測(cè)試

@李楠 和@KevinWei 已經(jīng)提到了。 這個(gè)辦法,既方便閱讀理解代碼,也方便修改代碼。非常重要。

5. Code Review

@KevinWei 也已經(jīng)提到了。

關(guān)鍵詞:開發(fā)代碼維護(hù)

贊助商鏈接: