代碼大全 code complete 閱讀筆記
感謝肖勝學長,將此書贈送給我,並提議每週總結一下學習心得。這對我來說也是一次改變,更是挑戰,在之前總是下決心寫閱讀筆記,但最後往往不能堅持到底,這次我一定要將這件事做好。
Contents at a Glance
初步瀏覽了目錄,這本書並不是軟件源代碼大全的意思,引用本書前序中的話來講,code complete 是“編碼完成”的意思,是一個軟件項目開發過程中的重要里程碑(milestone)。軟件項目進行到這裏,表明已經完成了所有的編碼工作,即將開始系統測試。這本書講的正式爲了到達“編碼完成”這一重要里程碑所必須的軟件構建技術,確切地說,就是如何編寫高質量的代碼。
兩件重要的事
1.如何寫出高質量的代碼
事實上我比較認同作者的觀點:那就是應該首先爲人編寫代碼,其次纔是爲機器,代碼主要是供人閱讀的。
2.如何成爲一個優秀的程序員
目前還在看一本書《黑客與畫家》,一個優秀的程序員絕不應該僅僅是代碼的堆砌,僅僅以實現需求爲目的。優秀的程序員應該像一個藝術家、畫家一樣,對自己的作品負責,要爲它注入靈魂,讓它成爲有靈魂的作品,這就要求程序員投入自己的感情,真正發自內心的想去做好這件事,甚至達到忘我的境界。
正文開始前的胡侃
下面準備開始寫正文啦,畢竟我也是很久沒有寫東西的習慣了,主要還是因爲我太懶了,大學以來就越來越懶。自以爲我的自律較差,但是既然決定開始寫這個閱讀筆記,既是對肖勝學長的承諾,也是對自己的承諾,身爲即將工作的大學生,應該不忘初心,不斷的學習,更新自己,不要滿足現狀,才能走的更遠。
本書並不需要按照順序來閱讀,於是我直接先選擇了目錄中我比較感興趣的一章,那就是變量名的命名規範。(目前markdown還用的不很熟,只會列標題嘻嘻)
第11章 變量名的力量
Considerations in choosing good name
-
變量名不能隨意的取
因爲變量名本質就是代表了變量本身,而狗的名字和狗卻是不同的東西。 -
以問題作爲導向(problem orientation)
一個好記的名字反映的通常都是問題,而不是解決方案。
一個好名字通常表達的是“什麼”,而不是“如何”。舉個例子:
表示打印機狀態 bitFlag就比printerReady更好
財務軟件裏,calcValde也比sum更加的精準 -
最適當的名字長度
應該將變量名的長度控制在8到20個字符之間,太短的名字無法傳達足夠的信息,而太長的名字也會使程序的視覺結構變得模糊不清。
——但是,短的變量名也並非總是不好,當你把一個變量名去的很短的時候,比如i,這種變量本身也說明了一件事——該變量代表的是一個臨時數據,作用域非常有限。 -
變量名中的計算值限定詞
類似於 total、sum、average、max、min、record、String這樣的限定詞,應該將它們放在變量的最後。 -
變量名應常用對仗詞
- begin\end
- first\last
- locked\unlocked
- visible\invisible
- source\destination
- source\target
- 爲特定類型的數據類型命名
-
狀態變量命名
不要立馬只想到flag,不管是什麼flag,表達的意義仍然不夠清晰,所以我們可以直接用具體的詞去描述。如: dataReady、recalcNeeded、reportType這樣的具體標記,來取代模糊的xxxFlag。 -
爲布爾變量命名
- done
表示某件事情已經完成 - error
表示發生了錯誤 - found
表示某個值已經找到 - success
表示某一香操作已經成功。
還是一樣的道理,不要使用模糊不清的狀態詞。應該明確表態。對於status這樣的詞名字,你什麼也說不出來,爲了取得更好的效果,應該吧status替換爲類似於error或者statuOK這樣的名字,比如sourceFile總是不如sourceFileAvailable、sourceFileFound這樣的變量表達的意思更清楚。
- done
-
要點及補充
Java的標準命名規則不再複述,因爲是一開始就約定好的語言風格。
至於說其他的一些細節,還是需要以後慢慢地提升。
Key Point
原文引用
- 好的變量名是提高程序可讀性的一項關鍵要素 。對特殊種類的變量,比如循環下表和狀態變量,需要加以特殊考慮
- 名字要儘可能地具體。那些太模糊或者太通用以至於能夠用於多種目的的名字通常都是不友好的
- 命名規則應該能夠區分局部數據、類數據和全局數據。他們還應該可以區分類型名、具名常量、枚舉類型名字和變量名
- 無論哪種類型的項目,你都應該採用某種變量命名規則。你所採用的規則取決於你的程序規模,以及項目成員人數。
- 現代編程語言很少用到縮寫。如果你真的要使用縮寫,請使用項目縮寫詞典火標準前綴來幫你準確理解縮寫。
- 代碼閱讀的次數遠遠多於編寫的次數。確保你所取的名字更側重與閱讀方便,而不是便攜方便。