讀書筆記--<<會說話的代碼>>


  三天看完一本書,說出來我都不信,不過我還真是史無前例的做到了, 現在分享一下我的收獲,希望大家拍磚,共同討論一下.

  <<會說話的代碼>>一書是我們BJDP小組里的王洪亮老師的一本著作,第一次聽王老師分享時,就被王老師的技術折服了,如果大家在北京,有興趣的話可以參與我們這個"北京設計模式學習小組(BJDP)"(免費參與哦), 相信每一個人都會有所收獲 .

  還是說回書,這本書主要闡述了怎么樣讓我們寫的代碼具有自我的表達能力,讓每一個程序員都能看懂,而且易擴展和維護.主要從以下幾個方面着手:命名,注釋,風格與結構,架構.(以下內容是我從書總結出來,再加上自己的理解,如有不對,與作者無關哦)

  1. 命名:

    1)最好全要英文,不要加入地方特色(拼音,法語之類),

    2)最好不要使用縮寫,相似單詞太多了,對con-有太多的猜測,(除那些約定俗成的)

    3)最好不要超過16個字符,太長不容易看懂,而且命名太長可能是設計上有問題.

    4)見名知義,無意義的名字最好不要起:temp,a,para1,list (循環變量除外).

    5)包或項目的名稱:組織/公司+項目+功能/模塊,如.Microsoft.Windows.Common.Controls這樣能避免與第三方模塊集成出現重名的情況.

    6)接口不要以I開頭,有時一開始定義的接口,改着改着就成了抽象類了,此外要說推薦,就推薦使用-able結尾表能力,如Cloneable,Runnable.

    7)基類要選用具有通用意義的名詞:Model,View,Control.有些抽象類可以加前綴Abstract+

    8)方法命名:動詞(+名詞).這里名詞根據實際情況可有可無,如果有的話,根據返回值的情況確定是否用復數形式.

    9)考慮使用時樣子如類名LeapYear,方法名isLeapYear,初看都不錯,但使用時就發現LeapYear.isLeapYear()不如LeapYear.isLeap()更好.

    10)常量都大寫,單詞多的話之間采用下划線,常量多的話可以通過開頭詞進行分組.

    11)多使用對應詞語:

min      max    positive negative  start stop    begin end  source destination  from to previous current next  create destory  plus minus
connect  close(disconnect)  upload download add remove add sub enable disable pause resume open close initialize finalize   request response
success fail bottom top include exclude input output import export width height up  down valid invalid push pop
get set first last befor after            
                 

  

  2. 注釋

    1)如果有版本管理工具,那么就不要修改記錄的注釋了.

    2)如果你還不知道todo那就要查一下啦

    3)JavaDoc不是萬能的,對那些需要指明的地方,還需要我們特別注釋.

    4)異常處理中 如果catch不做任何處理,那就需要寫注釋.

  

  3. 風格與結構

    1)看看自己寫的代碼是否整齊,IDE可以幫助我們縮進對對齊,以表現出更好的代碼層次關系.

    2)長方法,我個人理解超出一屏就太長了,IDE的Rafactor就派上用場了:提取方法,或者看一下是不是這個方法做了不該它做的事.

    3)某行太長,每次只能拖到滾輪才能看全的行,是不是太長了呢,

    4)去掉false 和true:if(candidate.visible==false)與if(!candidate.visible)哪個更好一些呢.

    5)長參數列表,有的書說參數個數可以是7+-2,本人作者建議參數小於3,最好一個都不要.我覺得如果架構設計的好的話,可以實現(有難度啊),起碼是個方向.具體方法是:引入參數對象或提取字段.

    6)長分支:if else或swich Case.解決辦法有:合並同類項(減少代碼),狀態/策略模式(會生成多個類,可以通過配置文件進和步簡化),

    7)魔法數字與魔法字符串:硬編碼在代碼的數字或字符,不僅不易修改,而且還看不懂它是什么意思.用配置文件試一試.

    8)去掉return前的判斷:比較以下三段代碼:你會發現....

 1 //first para
 2 public boolean hasMore(){
 3    boolean flag=false;
 4    if(list.size()>0){
 5        flag=true;
 6    }
 7    return flag;
 8 }
 9 
10 
11 //second para
12 public boolean hasMore(){
13    if(list.size()>0){
14        return ture;
15    }
16    return false
17 }
18 
19 
20 //third para
21 public boolean hasMore(){
22    return list.size()>0
23 }

 

    9)嵌套過深圈復雜度越高,越容易引起Bug,主要的方法有:提取方法(雖然實際上沒有減少層數,不過會改后續重構提供方便),提前判定,用while代替for

具體實例,請看書中的實例.

    10)Don't Repeat Yourself:老生常談的問題了.解法有:同一類內的提取方法,子類間的抽取方法到父類,相互之間沒關系類可以把共有方法移植到工具類.

    11)采用正則表達式進行內容或格式校驗.替代那些if  else if .....

    12)使用Lambda表達式簡化代碼.

  4.架構

    1)通過使用OOA與OOD來設計系統.

    2)盡量滿足SOLID設計原則.

    3)想要實現以上兩點:去啃本GOF的設計模式吧.

    

  書中內容有很多,我只是選取了其中的一部分,作為我的讀書筆記, 不算是"書透"吧,希望王老師不要責怪.

  以后爭取每讀完一本書,都寫一篇讀書筆記,對自己的幫助真的很大.也希望大家看了,能夠有所收獲.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM