1. 程式人生 > >程式碼整潔之道讀書筆記——第二章:有意義的命名

程式碼整潔之道讀書筆記——第二章:有意義的命名

第二章 有意義的命名

2.1 介紹

在軟體開發中,我們各種命名,不斷的命名,有這麼多的命名,一定要做好它!

2.2 名副其實

選個好名字要花很多時間,而且對於我們中國的程式設計師來說,選一個好的英文名字更要精挑細選,但是省下來的時間遠比花掉的多,一個名稱基本就答覆了你所有的大問題,如果名稱需要註釋來補充,那就不算名副其實!

書中通過一個變數、一個簡單的包含一個for迴圈的方法,說明了名副其實的命名比胡亂隨意命名強一百倍!!!

2.3 避免誤導

避免使用與本意相悖的詞

別用xxxList來命名一個不是List型別的變數

提防使用不同之處較小的名稱,比如兩個變數都挺長,但是它們只有一個詞不同,那這樣可讀性很差。我說一個我經歷的最具代表性的例子,介面反的圖片的欄位名,高清和縮略分別為picurl和picurls,那麼稍有不注意就寫錯了,那麼後果可想而知,有的列表項需要展示縮圖,你寫成了高清圖,載入超級慢

注意小寫字母l和大寫字母O的使用

2.4 做有意義的區分

不要在變數後面加個數字來區分它們的不同,這跟直接使用12345有啥區別

Info、Data,是意義含混的廢話

Name、NameString,Name難道能變成浮點數不成

Customer和CustomerObject區別何在

下面這三個方法,你說到底呼叫哪個:

getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();

要區分名稱,就要以讀者能鑑別不同之處的方式來區分

2.5 使用讀得出來的名稱

如果使用那些讀不出來的亂七八糟的名稱,你們在討論的時候就像個傻鳥,嘰嘰喳喳的,真的特別的搞笑,我覺得還是儘量避免使用自己造的那些縮略的詞,真的讓人看不懂

2.6 使用可搜尋的名稱

其實我們經常會用到搜尋功能去搜一些變數、方法、類,所以定義一個可搜尋的名稱很重要,如果定義個e,一搜索好幾百個e,等你找出來你定義的e變數,花兒都謝了!!!

2.7 避免使用編碼

把型別或者作用域編進名稱裡面,只會增加了解碼的負擔

2.7.1 匈牙利語標記法

不需要我們通過命名來記住此變數是哪種型別。。。

2.7.2 成員字首

現在在開發的時候,大部分的專案成員變數要求用m打頭,其實是不需要的,因為我們使用的編譯環境,會明確的標示出成員變數的顏色,比如我的就顯示的是紫色的,而且JakeWharton大神也吐槽不用m打頭來命名成員變數,所以我想,從今天起,我也不想用m打頭了。其實想想字首確實也沒啥用,用書中的話來說:人們會很快無視字首。最終,字首變作了不入法眼的廢料,變作了舊程式碼的標誌物。

2.7.3 介面和實現

作者並不喜歡介面命名前加I,如果介面和實現非得編碼一個,他寧肯在實現寫Imp來

其實這個也是說不好,我們專案現在是介面前加I,實現後加Impl,是不是非常醜陋,哈哈,這個也真是說不清道不明,各有各的看法,我也有點糾結,真是不知道該怎麼用,目前還是介面加I,實現加Impl

2.8 避免思維對映

不應當讓讀者在腦中把你的名稱翻譯為它們熟知的名稱,編寫其他人能理解的程式碼

比如你將網址url命名為r,那就有點讓別人看不懂了

2.9 類名

類名應該是名詞或名詞短語,類名不應當是動詞。

作者說避免使用Manager、Processor、Data、Info這樣的類名。。。但是我們的專案中充斥著這樣的類名。。。

2.10 方法名

方法名應該是動詞短語,比如post、delete、save等,屬性訪問可以用get、set、is

可以考慮用靜態工廠來建立物件,將構造器設為private,強制使用這種手段

2.11 別扮可愛

不要耍寶,用一些奇奇怪怪的名字來命名,正常命名最好不過了

2.12 每一個概念對應一個詞

這個我們可以這樣理解,比如說提交,有時候叫commit,有時候叫submit,都是個提交的意思,但是還是儘量統一,只用一個就好

2.13 別用雙關語

比如多種場景都使用add方法,那麼這個add到底是什麼意思,可以考慮區分開來,比如使用insert,append等

2.14 使用解決方案領域名稱

只有程式設計師才會閱讀程式碼,所以,儘量使用和電腦科學有關的術語

2.15 使用源自所涉問題領域的名稱

使用此問題領域的名稱來命名

2.16 新增有意義的語境

如果你不把一些類似name,count,number等變數放到一個類中,比如在某一個方法裡,根本不知道他們是幹什麼的,所以可以根據實際情況新增語境,比如orgName,機構名稱,userName,使用者名稱稱

2.17 不要新增沒用的語境

比如你的專案縮寫就叫VgMap,完後你在每一個類前都加一個VgMap?,當然沒人這麼做,只不過誇張一下,不要再命名的時候加沒用的語境

2.18 最後的話

取名真的挺難,需要良好的描述技巧和共有文化背景,很多人都沒能學會做的很好

總結

命名真的很重要,有很多時候,比如,有的人會把儲存視訊url的List型別的變數命名為video,這只是一個簡單的例子,我只想說,命名真的真的很重要!!!