<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > <讀書(shū)筆記> 代碼整潔之道

<讀書(shū)筆記> 代碼整潔之道

作者: 時(shí)間:2016-08-01 來(lái)源:網(wǎng)絡(luò ) 收藏

  概述

本文引用地址:http://dyxdggzs.com/article/201608/294841.htm

  1、本文檔的內容主要來(lái)源于書(shū)籍《整潔之道》作者Robert C.Martin,屬于讀書(shū)筆記。

  2、軟件質(zhì)量,不僅依賴(lài)于架構和項目管理,而且與質(zhì)量緊密相關(guān),本書(shū)提出一種,質(zhì)量與整潔成正比的觀(guān)點(diǎn),并給出了一系列行之有效的整潔代碼操作實(shí)踐,只要遵循這些規則,就可以編寫(xiě)出整潔的代碼,從而提升代碼質(zhì)量。

  3、該書(shū)介紹的規則均來(lái)自于作者多年的實(shí)踐經(jīng)驗,涵蓋從命名到重構的多個(gè)編程方面,具有很好的學(xué)習和借鑒價(jià)值。

  4、習藝要有二:知和行。你應當學(xué)習有關(guān)規則、模式和實(shí)踐的知識,窮盡應知之事,并且對其了如指掌,通過(guò)刻苦實(shí)踐掌握它!

  前言

  學(xué)習整潔代碼很難,它不止于要求你掌握原則和模式,你還得在上面下功夫,并自行實(shí)踐,體驗失敗。你須觀(guān)察他人如何實(shí)踐與失敗,怎樣蹣跚學(xué)步,再轉頭學(xué)習他們的路數,。

  本書(shū)要求你多用信息,多用功,而且非常用功。如何用功?-大量閱讀代碼,并琢磨代碼好在什么地方,壞在什么地方。

  本書(shū)大概分為三部分:原則、模式和實(shí)踐。

  一、 使用有意義的命名

  1、名副其實(shí)

  注意命名,一旦發(fā)現有更好的名稱(chēng)就換掉舊的,這么做閱讀的人會(huì )更開(kāi)心

  名稱(chēng)本身應該能解釋其含義,無(wú)需注釋就能看懂是最佳。比如

  int d;//消失時(shí)間,以日計

  int elapsedTimeInDays;

  前者名稱(chēng)沒(méi)有任何含義,在程序中使用時(shí)看不出這個(gè)變量的實(shí)際作用,需要對應注釋才能看懂,因此遠不如后者的名稱(chēng)好!

  2、避免誤導

  程序員必須避免留下掩藏代碼本意的錯誤線(xiàn)索,避免使用與本意相悖的詞。

  提防使用細節之處差別較小的名稱(chēng)

  使用相同的拼寫(xiě)方式,前后拼寫(xiě)不一致(大小寫(xiě)不同),就是誤導。在使用編輯器名稱(chēng)自動(dòng)補全功能時(shí),拼寫(xiě)相近的變量容易引起誤選。

  避免使用小寫(xiě)字母l和大寫(xiě)字母O作為變量名稱(chēng),易與1和0混淆

  3、做有意義的區分

  避免以數字系列命名,其無(wú)法提供正確的信息和導向作者意圖的線(xiàn)索。

  不要使用意義相近的名稱(chēng),比如ProductInfo和ProductData變量不同,意思一樣,容易引起意義混淆

  不要使用冗余信息,比如NameString,難道Name會(huì )是一個(gè)浮點(diǎn)數嗎?如果是,就不該使用Name命名。

  4、使用讀的出來(lái)的名稱(chēng)

  人類(lèi)善于記憶和使用單詞,如果名稱(chēng)無(wú)法閱讀或者發(fā)音,就不是一個(gè)好名稱(chēng),討論和交流時(shí)也難以表達。

  比如函數名稱(chēng)為:genymdhms()//生成日期,年月日時(shí)分秒。

  不要使用傻乎乎的自造詞,而要使用恰當的英語(yǔ)單詞

  5、使用可搜索的名稱(chēng)

  比如字母e,f等就不是一個(gè)好的變量名,其是英文常用字母,不方便搜索,

  單字母名稱(chēng)僅限于本地局部變量使用,名稱(chēng)長(cháng)短應該與作用域大小相對應

  如果程序中多出使用相同數字,實(shí)現相同功能,則需要使用宏定義變量代替。

  比如WORK_DAYS_PER_WEEK就比數字5好搜索,也更能體現作者意圖

  6、避免使用編碼

  無(wú)需把類(lèi)型和作用域編進(jìn)名稱(chēng),這樣只會(huì )自找麻煩,既不便發(fā)音,也容易拼錯,對解決問(wèn)題毫無(wú)幫助。

  匈牙利標記法,破壞了不編碼的規則,不應該采用。

  也不必使用成員前綴,應該把類(lèi)和函數做的足夠小,同時(shí)使用可以高亮和顏色標出成員的編輯環(huán)境。(Keil,notepad++都支持)。

  7、避免思維映射

  不應當讓讀者把你腦中的名稱(chēng)翻譯成他們熟知的名稱(chēng),這個(gè)問(wèn)題常見(jiàn)于選擇使用問(wèn)題領(lǐng)域的術(shù)語(yǔ)還是解決方案領(lǐng)域的術(shù)語(yǔ)時(shí)。

  在作為局部變量時(shí),并且名稱(chēng)沒(méi)有沖突時(shí),可以采用i,j,k作為循環(huán)變量。

  專(zhuān)業(yè)程序員善用其能,編寫(xiě)能讓他人理解的代碼

  8、類(lèi)名

  類(lèi)名應該是名稱(chēng)或者名詞短語(yǔ),例如Customer、Account,避免使用Manager、Data、Info這樣的類(lèi)名,其不應該是動(dòng)詞。

  9、方法名

  方法名應該是動(dòng)詞或者動(dòng)詞短語(yǔ),比如postPayment、deletePage或s**e,屬性訪(fǎng)問(wèn)應該加上set、get、is前綴

  10、每個(gè)概念對應一個(gè)詞

  給每個(gè)抽象概念選用一個(gè)詞,并且一以貫之。比如使用fetch、retrieve、get在多個(gè)類(lèi)的中同種方法命名,就容易引起混淆。

  11、別用雙關(guān)語(yǔ)

  避免將以此用于不同目的,同一術(shù)語(yǔ)用于不同概念就是雙關(guān)語(yǔ)了。

  比如多個(gè)類(lèi)中都有add方法,該方法通過(guò)增加或者鏈接兩個(gè)現存值來(lái)獲得新值,如果一個(gè)新類(lèi)的含義是,把單個(gè)參數放到群集(collection)中,使用add名稱(chēng),雖然保持了名稱(chēng)一致,你是含義卻不同,應該使用insert才對。

  12、使用解決方案領(lǐng)域的名稱(chēng)

  因為只有程序員才會(huì )讀取你的代碼,因此名稱(chēng)應該選擇解決方案領(lǐng)域的名稱(chēng),而不是問(wèn)題設計領(lǐng)域的名稱(chēng)。比如名稱(chēng)AccountVisitor就比JobQueue富有意義。

  13、使用源自所涉及問(wèn)題領(lǐng)域的名稱(chēng)

  當不能使用程序員所熟悉的術(shù)語(yǔ)命名時(shí),就應該采用所涉及問(wèn)題領(lǐng)域的名稱(chēng)

  與所涉問(wèn)題領(lǐng)域更加貼近的代碼,應當采用源自問(wèn)題領(lǐng)域的名稱(chēng)

  14、添加有意義的語(yǔ)境

  很少有名稱(chēng)能夠自我說(shuō)明-多數都不能,因此需要使用良好命名的類(lèi)、函數來(lái)放置名稱(chēng),給讀者提供語(yǔ)境。

  比如添加前綴addrFirstName、addrLastName、addrState,就可以提供語(yǔ)境,這些變量屬于地址范圍。更好的做法是,創(chuàng )建一個(gè)名稱(chēng)為Address的類(lèi),來(lái)存放這些相關(guān)變量。

  語(yǔ)境的增強也讓算法能夠通過(guò)分解為更小的函數而變得干凈利索。

  15、不要添加沒(méi)有意義的語(yǔ)境

  比如應用(Gas Station Deluxe)簡(jiǎn)稱(chēng)為GSD,因此為每個(gè)函數、類(lèi)、變量增加同樣的前綴就GSD命名就不是一個(gè)好點(diǎn)子。

  Address是個(gè)好名稱(chēng),但是如果需要與MAC地址、端口地址或Web地址區分,應當使用PostalAddress、MAC、URI,這樣的名稱(chēng)更為精確。

  16、總結

  取名字最難地方在于需要良好的描述技巧和共有的文化背景

  試試上面的規則,看你的代碼的可讀性是否有所提升。如果維護別人的代碼,使用重構工具來(lái)解決問(wèn)題,效果也好立竿見(jiàn)影,而且會(huì )持續下去。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 代碼 TDD

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>