天天看點

編寫高品質的代碼—從命名入手(命名…

  要寫高品質的代碼,不是一件容易的事,需要長年累月的鍛煉,是一個量變到質變的過程,但要寫好命名,隻需要有比較好的英語文法基礎和一種自我意識即可輕松達到。本博文将會結合本人的開發經驗,總結出若幹命名規則,這些命名規則純屬個人的使用習慣,不代表是一種理想的規則,在這裡列舉出來,供大家交流讨論。

  1. 切忌使用沒有任何意義的英語字母進行命名

for(int i=0; i<10; i++) {

    //...

}

  2. 切忌使用拼音,甚至是拼音首字母組合

cishu =5;  // 循環的次數

zzje = 1000.00;  // 轉賬金額

筆者在做代碼檢查的時候,無數次遇到過這樣的命名,使人哭笑不得。

  3. 要使用英文,而且要使用準确的英語,無論是拼寫還是文法

名詞單數,必須使用單數英文,如account、customer。

對于數組,清單等對象集合的命名,必須使用複數,而且最好按照英文的文法基礎知識使用準确的複數形式,如 list accounts、set strategies。

對于boolean值的屬性,很多開發人員習慣使用isxxx,如isclose(是否關閉),但這裡有兩點建議:1)最好不要帶“is”,因為javabean的規範,為屬性生成get/set方法的時候,會用“get/set/is”,上面的例子,生成get/set方法就會變成“getisclose/isisclose/getisclose”,非常别扭;2)由于boolean值通常反映“是否”,是以準确的用法,應該是是用“形容詞”,上面的例子,最終應該被改為 closed,那麼get/set方法就是“getclosed/iscolsed/setclosed”,非常符合英語閱讀習慣。

  4. 方法名的命名,需要使用“動賓結構短語”或“是動詞+表語結構短語”

  筆者曾看到過千奇百怪的方法命名,有些使用名詞,有些甚至是“名詞+動詞”,而且,如果賓語是一個對象集合,還是最好使用複數。

createorder(order order) //good    

  ordercreate(order order) //bad

  removeorders(list orders) //good 

  removeorder(list order) //bad

5. 對于常見的“增删改查”方法,命名最好要謹慎

增加:最常見使用create和add,但最好根據英語的語義進行區分,這有助于了解,create代表建立,add代表增加。比如,要建立一個student,用createstudent要比用addstudent好,為什麼?想想如果有個類叫clazz(班級,避開java關鍵字),現在要把一個student加入到一個clazz,clazz很容易就定義了一個 addstudent(student student)的方法,那麼就比較容易混淆。

修改:常見的有alter、update、modify,個人覺得modify最準确。

查詢:對于擷取單個對象,可以用get或load,但個人建議用get,解釋請見第7點的說明;對于不分條件列舉,用list;對于有條件查詢,用search(最好不要用find,find在英文了強調結果,是“找到”的意思,你提供一個“查詢”方法,不保證輸入的條件總能“找到”結果)。

删除:常見的有delete和remove,但删除建議用delete,因為remove有“移除”的意思,參考clazz的例子就可以了解,從班級移除一個學生,會用removestudent。

  6. 甯願方法名冗長,也不要使用讓人費解的簡寫

  筆者曾經遇到一個方法,判斷“支付賬戶是否與收款賬戶相同”,結果我看到一個這樣的命名:

checkisorderingacccollaccsame(...)

很難了解,我馬上把它改為:

isorderingaccountsameascollectionaccount(...)

 雖然有點長,但非常容易閱讀,而且這種情況總是出現得比較少。

  7. 如果你在設計業務系統,最好不要使用技術化的術語去命名

  8. 成員變量不要重複類的名稱

  例如,很多人喜歡在account對象的成員變量中使用accountid,accountnumber等命名,其實沒有必要,想想成員變量不會孤立的存在,你引用accountid,必須是account.accountid,用account.id已經足夠清晰了。

  “勿以善小而不為,勿以惡小而為之”、“細節決定成敗”,有太多的名言告訴我們,要注重細節。一個優秀的程式員,必須要有堅實的基礎,而對于命名規則這樣容易掌握的基礎,我們何不現行?

歡迎學習本文,未經部落客允許,禁止轉載!

轉自:http://blog.csdn.net/qq_31810357