有很多人說作為一個(gè)程序員,必須看看《代碼整潔之道》(clean code),雖然自己也閱讀了并實(shí)踐了一些公司總結(jié)的前后端代碼規(guī)范,但總覺得缺少點(diǎn)什么,這個(gè)書與一般的代碼規(guī)范的區(qū)別在于,代碼規(guī)范記錄的是死的條目,拿來直接照著用就可以了,而這本書從一個(gè)更深層的角度剖析了如何寫出高質(zhì)量代碼的問題。
代碼的質(zhì)量與整潔都成正比,這是整本書的中心,我主要閱讀了第一、二、三、四、五章,這些章節(jié)的內(nèi)容與目前的工作內(nèi)容緊密相關(guān),將以下較為重要的點(diǎn)整理摘錄如下。
整潔代碼
項(xiàng)目經(jīng)常在初期進(jìn)展迅速,但在后期卻慢如蝸牛,因?yàn)槊看蔚男薷亩紩?huì)影響到其他地方的兩三處代碼,混亂的增加,團(tuán)隊(duì)的生產(chǎn)力持續(xù)下降,管理層只好增加更多的人手到項(xiàng)目中,但事與愿違,新人并不熟悉系統(tǒng)。
進(jìn)度和代碼質(zhì)量可能互相矛盾,項(xiàng)目經(jīng)理護(hù)衛(wèi)項(xiàng)目的進(jìn)度和需求,開發(fā)人員則抱怨需求脫離了最初的設(shè)計(jì),哀嘆進(jìn)度太緊張,沒法好好干活,制造混亂無助于趕上期限,趕上期限唯一的方法——始終盡可能的保持代碼整潔。
寫出整潔的代碼,需要遵循大量的小技巧,不斷去實(shí)踐以獲得“整潔感”。
“破窗理論”也適用于軟件項(xiàng)目開發(fā),開到別人不規(guī)整的代碼,放任自己也參與了破壞活動(dòng)。
有意義的命名
- 名副其實(shí)。如果命名需要注釋來說明,就不叫名副其實(shí)。
- 避免誤導(dǎo)。hp、aix、sco不應(yīng)該作為變量名,應(yīng)為它們是某些平臺(tái)的專有名稱。提防使用不同之處較小的名稱,比如XYZContorllerForEfficientHandlingOfStrings和XYZControllerForEffientStorageOfStrings。避免大寫O和小寫L作為變量名,可能會(huì)被看作阿拉伯?dāng)?shù)字0和1。
- 做有意義的區(qū)分。不能僅僅為滿足編譯器的的需要而寫代碼,代碼更重要的是給人來閱讀的。
- 使用讀得出來的名稱。
- 使用便于搜索的名稱。
- 使用解決方案領(lǐng)域的名稱。只有程序員才會(huì)讀你的代碼。
- 不要添加沒用的語境。比如說在一個(gè)Item類中,不必將主鍵設(shè)置為ItemId.
函數(shù)
- 盡量避免長函數(shù),函數(shù)的第一規(guī)則是要短小。if語句 else語句 while語句其中的函數(shù)應(yīng)該只有一行。
- "函數(shù)應(yīng)該只做一件事。做好這件事。只做一件事",判斷一個(gè)函數(shù)是否只做了一件事,就是看是否能再拆出一個(gè)函數(shù)。
- 要確保函數(shù)只做一件事,要確保函數(shù)中的語句都要在同意抽象層級(jí)上。
- 使用描述性的名稱,描述函數(shù)做的事。別害怕長名稱,長而具有描述性的名稱,要比描述性的長注釋好。
- 最理想的參數(shù)數(shù)量是零,其次是一,再次是二, 盡量避免三參數(shù)函數(shù),有足夠多的理由才能用三個(gè)以上參數(shù),如果需要多個(gè)參數(shù),就說明其中一些參數(shù)應(yīng)該封裝為類了。
- 使用異常替代返回錯(cuò)誤碼
- 別重復(fù)自己。重復(fù)可能是軟件中一切邪惡的根源,許多原則與實(shí)踐規(guī)則都是為控制和消除重復(fù)而創(chuàng)建的。
注釋
- 注釋的恰當(dāng)用法是彌補(bǔ)我們?cè)谟么a表達(dá)意圖時(shí)的遭遇的失敗。
- 注釋存在的時(shí)間越久,就離其所描述的代碼越遠(yuǎn),越來越變得全然錯(cuò)誤。
- 注釋不能美化糟糕的代碼。
- 最好用代碼而不是注釋說明來闡述行為
- 避免循規(guī)式注釋 例如 要求每個(gè)函數(shù)都要有javadoc注釋,這樣的注釋只會(huì)搞亂代碼,有可能誤導(dǎo)讀者,javadoc注釋額外的形式要求等同于八股文章
垂直格式
- 每個(gè)空白行都是一條線索,標(biāo)識(shí)出新的獨(dú)立概念,空白行隔離開了概念,靠近的代碼行則暗示了他們之間的緊密聯(lián)系。
- 變量聲明應(yīng)盡可能的靠近其使用位置。
- 如果某個(gè)函數(shù)調(diào)用了另外一個(gè),就應(yīng)該把它們放到一起,而且調(diào)用者應(yīng)該盡可能放在被調(diào)用者上面。
- 每個(gè)每個(gè)程序員都有自己喜歡的格式規(guī)則,但如果在一個(gè)團(tuán)隊(duì)中工作,就是團(tuán)隊(duì)說了算。