精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

阿里工程師談什么是好的代碼?

新聞
很難給好的代碼下一個定義,相信很多人跟我一樣不會認為整潔的代碼就一定是好代碼,但好代碼一定是整潔的,整潔是好代碼的必要條件。整潔的代碼一定是高內聚低耦合的,也一定是可讀性強、易維護的。

一句話概括

衡量代碼質量的唯一有效標準:WTF/min —— Robert C. Martin

阿里工程師談什么是好的代碼?

Bob 大叔對于好代碼的理解非常有趣,對我也有很大的啟發。我們編寫的代碼,除了用于機器執行產生我們預期的效果以外,更多的時候是給人讀的,這個讀代碼的可能是后來的維護人員,更多時候是一段時間后的作者本人。

我敢打賭每個人都遇到過這樣的情況:過幾周或者幾個月之后,再看到自己寫的代碼,感覺一團糟,不禁懷疑人生。

我們自己寫的代碼,一段時間后自己看尚且如此,更別提拿給別人看了。

  • 任何一個傻瓜都能寫出計算機可以理解的代碼。唯有寫出人類容易理解的代碼,才是優秀的程序員。—— Martin Fowler

所以,談到好代碼,首先跳入自己腦子里的一個詞就是:整潔。

好的代碼一定是整潔的,給閱讀的人一種如沐春風,賞心悅目的感覺。

  • 整潔的代碼如同優美的散文。—— Grady Booch

好代碼的特性

很難給好的代碼下一個定義,相信很多人跟我一樣不會認為整潔的代碼就一定是好代碼,但好代碼一定是整潔的,整潔是好代碼的必要條件。整潔的代碼一定是高內聚低耦合的,也一定是可讀性強、易維護的。

高內聚低耦合

高內聚低耦合幾乎是每個程序員員都會掛在嘴邊的,但這個詞太過于寬泛,太過于正確,所以聰明的編程人員們提出了若干面向對象設計原則來衡量代碼的優劣:

  • 開閉原則 OCP (The Open-Close Principle)
  • 單一職責原則 SRP (Single Responsibility Principle)
  • 依賴倒置原則 DIP (Dependence Inversion Principle)
  • 最少知識原則 LKP (Least Knowledge Principle)) / 迪米特法則 (Law Of Demeter)
  • 里氏替換原則 LSP (Liskov Substitution Principle)
  • 接口隔離原則 ISP (Interface Segregation Principle)
  • 組合 / 聚合復用原則 CARP (Composite/Aggregate Reuse Principle)

這些原則想必大家都很熟悉了,是我們編寫代碼時的指導方針,按照這些原則開發的代碼具有高內聚低耦合的特性。換句話說,我們可以用這些原則來衡量代碼的優劣。

但這些原則并不是死板的教條,我們也經常會因為其他的權衡(例如可讀性、復雜度等)違背或者放棄一些原則。比如子類擁有特性的方法時,我們很可能打破里氏替換原則。再比如,單一職責原則跟接口隔離原則有時候是沖突的,我們通常會舍棄接口隔離原則,保持單一職責。只要打破原則的理由足夠充分,也并不見得是壞的代碼。

可讀性

代碼只要具有了高內聚和低耦合就足夠好了嗎?并不見得,我認為代碼還必須是易讀的。好的代碼無論是風格、結構還是設計上都應該是可讀性很強的。可以從以下幾個方面考慮整潔代碼,提高可讀性。

命名

大到項目名、包名、類名,小到方法名、變量名、參數名,甚至是一個臨時變量的名稱,其命名都是很嚴肅的事,好的名字需要斟酌。

名副其實

好的名稱一定是名副其實的,不需要注釋解釋即可明白其含義的。

 

  1. /** 
  2. * 創建后的天數 
  3. **/ 
  4. int d;   
  5. int daysSinceCreation; 

后者比前者的命名要好很多,閱讀者一下子就明白了變量的意思。

容易區分

我們很容易就會寫下非常相近的方法名,僅從名稱無法區分兩者到底有啥區別(eg. getAccount()與getAccountInfo()),這樣在調用時也很難抉擇要用哪個,需要去看實現的代碼才能確定。

可讀的

名稱一定是可讀的,易讀的,最好不要用自創的縮寫,或者中英文混寫。

足夠短

名稱當然不是越長越好,應該在足夠表達其含義的情況下越短越好。

格式

良好的代碼格式也是提高可讀性非常重要的一環,分為垂直格式和水平格式。

垂直格式

通常一行只寫一個表達式或者子句。一組代碼代表一個完整的思路,不同組的代碼中間用空行間隔。

 

  1.      
  2. public class Demo { 
  3.     @Resource 
  4.     private List<Handler> handlerList; 
  5.     private Map<TypeEnum, Handler> handlerMap = new ConcurrentHashMap<>(); 
  6.   
  7.     @PostConstruct 
  8.     private void init() { 
  9.         if (!CollectionUtils.isEmpty(handlerList)) { 
  10.             for (Handler handler : handlerList) { 
  11.                 handlerMap.put(handler.getType(), handler); 
  12.             } 
  13.         } 
  14.     } 
  15.   
  16.     publicResult<Map<String, Object>> query(Long id, TypeEnum typeEnum) { 
  17.         Handler handler = handlerMap.get(typeEnum); 
  18.         if (null == handler) { 
  19.             return Result.returnFailed(ErrorCode.CAN_NOT_HANDLE); 
  20.         } 
  21.         return handler.query(id); 
  22.     } 

如果去掉了空行,可讀性大大降低。

 

  1. public class Demo { 
  2.      @Resource 
  3.      private List<Handler> handlerList; 
  4.      private Map<TypeEnum, Handler> handlerMap = new ConcurrentHashMap<>(); 
  5.      @PostConstruct 
  6.      private void init() { 
  7.          if (!CollectionUtils.isEmpty(handlerList)) { 
  8.              for (Handler handler : handlerList) { 
  9.                  handlerMap.put(handler.getType(), handler); } } } 
  10.      public Result<Map<String, Object>> query(Long id, TypeEnum typeEnum) { 
  11.          Handler handler = handlerMap.get(typeEnum); 
  12.          if (null == handler) { 
  13.              return Result.returnFailed(ErrorCode.CAN_NOT_HANDLE); 
  14.          } 
  15.          return handler.query(id); } 
  16.  } 

類靜態變量、實體變量應定義在類的頂部。類內方法定義順序依次是:公有方法或保護方法 > 私有方法 > getter/setter 方法。

水平格式

要有適當的縮進和空格。

團隊統一

通常,同一個團隊的風格盡量保持一致。集團對于 Java 開發進行了非常詳細的規范。(可點擊下方閱讀原文,了解更多內容)

類與函數

類和函數應短小,更短小

類和函數都不應該過長(集團要求函數長度最多不能超過 80 行),過長的函數可讀性一定差,往往也包含了大量重復的代碼。

函數只做一件事(同一層次的事)

同一個函數的每條執行語句應該是統一層次的抽象。例如,我們經常會寫一個函數需要給某個 DTO 賦值,然后再調用接口,接著返回結果。那么這個函數應該包含三步:DTO 賦值,調用接口,處理結果。如果函數中還包含了 DTO 賦值的具體操作,那么說明此函數的執行語句并不是在同一層次的抽象。

參數越少越好

參數越多的函數,調用時越麻煩。盡量保持參數數量足夠少,最好是沒有。

注釋

別給糟糕的代碼加注釋,重構他

注釋不能美化糟糕的代碼。當企圖使用注釋前,先考慮是否可以通過調整結構,命名等操作,消除寫注釋的必要,往往這樣做之后注釋就多余了。

好的注釋提供信息、表達意圖、闡釋、警告

我們經常遇到這樣的情況:注釋寫的代碼執行邏輯與實際代碼的邏輯并不符合。大多數時候都是因為代碼變化了,而注釋并沒有跟進變化。所以,注釋最好提供一些代碼沒有的額外信息,展示自己的設計意圖,而不是寫具體如何實現。

刪除掉注釋的代碼

git 等版本控制已經幫我們記錄了代碼的變更歷史,沒必要繼續留著過時的代碼,注釋的代碼也會對閱讀等造成干擾。

錯誤處理

錯誤處理很重要,但他不能搞亂代碼邏輯

錯誤處理應該集中在同一層處理,并且錯誤處理的函數最好不包含其他的業務邏輯代碼,只需要處理錯誤信息即可。

拋出異常時提供足夠多的環境和說明,方便排查問題

異常拋出時最好將執行的類名,關鍵數據,環境信息等均拋出,此時自定義的異常類就派上用場了,通過統一的一層處理異常,可以方便快速地定位到問題。

特例模型可消除異常控制或者 null 判斷

大多數的異常都是來源于 NPE,有時候這個可以通過 Null Object 來消除掉。

盡量不要返回 null ,不要傳 null 參數

不返回 null 和不傳 null 也是為了盡量降低 NPE 的可能性。

如何判斷不是好的代碼

討論了好代碼的必要條件,我們再來看看好代碼的否定條件:什么不是好的代碼。Kent Beck 使用味道來形容重構的時機,我認為當代碼有壞味道的時候,也代表了其并不是好的代碼。

代碼的壞味道

重復

  • 重復可能是軟件中一切邪惡的根源。—— Robert C.Martin

Martin Fowler 也認為壞味道中首當其沖的就是重復代碼。

很多時候,當我們消除了重復代碼之后,發現代碼就已經比原來整潔多了。

函數過長、類過大、參數過長

過長的函數解釋能力、共享能力、選擇能力都較差,也不易維護。

過大的類代表了類做了很多事情,也常常有過多的重復代碼。

參數過長,不易理解,調用時也容易出錯。

發散式變化、霰彈式修改、依戀情結

如果一個類不是單一職責的,則不同的變化可能都需要修改這個類,說明存在發散式變化,應考慮將不同的變化分離開。

如果某個變化需要修改多個類的方法,則說明存在霰彈式修改,應考慮將這些需要修改的方法放入同一個類。

如果函數對于某個類的興趣高于了自己所處的類,說明存在依戀情結,應考慮將函數轉移到他應有的類中。

數據泥團

有時候會發現三四個相同的字段,在多個類和函數中均出現,這時候說明有必要給這一組字段建立一個類,將其封裝起來。

過多的 if…else 或者使用 switch

過多的 if…else 或者 switch ,都應該考慮用多態來替換掉。甚至有些人認為除個別情況外,代碼中就不應該存在 if…else 。

總結

本文首先一句話概括了我認為的好代碼的必要條件:整潔,接著具體分析了整潔代碼的特點,又分析了好代碼的否定條件:什么樣的代碼不是好的代碼。僅是本人的一些見解,希望對各位以后的編程有些許的幫助。

我認為僅僅編寫出可運行的代碼是遠遠不夠的,還要時刻注意代碼的整潔度,留下一些漂亮的代碼,希望寫的代碼都能保留并運行 102 年!

責任編輯:未麗燕 來源: 淘寶技術
相關推薦

2016-09-21 10:10:50

2015-01-12 10:01:35

2018-06-03 14:26:00

阿里工程師內網代碼

2015-03-04 10:03:09

2010-01-26 10:00:30

Google工程師Web

2019-06-17 08:57:13

優秀工程師技術程序員

2018-10-29 08:20:26

Apache Flin工程師AI

2009-02-11 13:15:54

軟件工程師女工程師google

2013-04-28 09:40:01

工程師程序員

2015-05-21 10:43:36

工程師如何寫代碼

2016-04-08 14:32:32

全棧工程師世界

2015-09-24 17:01:06

2011-03-04 17:45:30

Quora工程師

2013-10-25 11:19:18

Google大數據Sanjay Ghem

2018-02-25 11:00:05

2011-03-14 13:40:02

移動Web架構人人網

2017-04-10 18:10:31

2019-08-30 12:02:23

數據工程師云廠商

2009-03-19 10:21:35

微軟工程師職業發展

2011-04-25 09:34:52

PythoncGO
點贊
收藏

51CTO技術棧公眾號

97中文字幕在线观看| 久久免费视频2| 久久久精品毛片| 成人影视亚洲图片在线| 欧美区视频在线观看| 小泽玛利亚av在线| 婷婷综合激情网| 亚洲日韩成人| 日韩视频在线观看免费| 白嫩情侣偷拍呻吟刺激| 色香欲www7777综合网| 亚洲欧美在线高清| 久久综合福利| 国产永久免费视频| 亚洲少妇在线| 精品国产欧美一区二区三区成人 | 欧美momandson| 亚洲人成精品久久久久久| 精品视频第一区| 97久久人国产精品婷婷 | 99视频在线免费| av网址在线免费观看| 99久久久无码国产精品| 成人a级免费视频| 台湾佬中文在线| 午夜久久久久| 日韩在线免费视频观看| 偷偷色噜狠狠狠狠的777米奇| 婷婷久久综合九色综合99蜜桃| 精品国产电影一区| 椎名由奈jux491在线播放 | 日韩有码在线视频| wwwwww日本| 欧美激情15p| 日韩一区二区三区观看| 久热精品在线观看视频| 国产精品迅雷| 激情av一区二区| 美脚丝袜脚交一区二区| 在线heyzo| 亚洲视频每日更新| 日本黄色a视频| 日本电影在线观看网站| 国产日韩欧美一区二区三区综合| 精品久久久久久综合日本 | 粉嫩高潮美女一区二区三区| 国产欧美精品日韩| 成人黄色免费网| 日本亚洲最大的色成网站www| 欧洲亚洲女同hd| 99久热在线精品996热是什么| 欧美日韩亚洲国产精品| 欧美成人精品xxx| 一区视频免费观看 | 国产精品自拍片| av资源一区| 香蕉久久一区二区不卡无毒影院 | 国产夫妻在线播放| 亚洲国产日产av| 免费毛片网站在线观看| av剧情在线观看| 精品国产乱码久久久久久虫虫漫画| 99国产精品白浆在线观看免费| 中日韩高清电影网| 亚洲午夜一二三区视频| 成人一区二区免费视频| 蜜桃麻豆影像在线观看| 色综合中文字幕| 午夜免费一区二区| 成人精品动漫| 欧美一区二区日韩一区二区| 制服下的诱惑暮生| 超碰在线一区| 亚洲色图美腿丝袜| 青青青视频在线播放| 国产精品成人一区二区不卡| 欧美精品免费看| 亚州国产精品视频| 久热精品视频| 成人欧美一区二区三区在线湿哒哒| 国产理论视频在线观看| 国产成人av网站| 鲁片一区二区三区| 69久久夜色| 一区二区三区.www| 欧美牲交a欧美牲交aⅴ免费真| 666av成人影院在线观看| 欧美视频在线一区| 日本女人性视频| 亚洲美女久久| 久久天堂av综合合色| 日韩av在线电影| 蜜臀av性久久久久蜜臀aⅴ流畅| 91在线网站视频| 神马精品久久| 亚洲日本va在线观看| 免费在线观看视频a| 国产第一亚洲| 亚洲精品www久久久久久广东| 在线看片中文字幕| 影音国产精品| 国产日韩精品一区二区| 日本黄色一区二区三区| 日本一二三不卡| 精品无码一区二区三区爱欲| 成人看片网页| 亚洲成人av在线| 麻豆一区在线观看| 亚洲区一区二| 亚洲自拍欧美色图| 黄色在线视频观看网站| 亚洲高清免费观看| av在线网址导航| 久久99国产精一区二区三区| 米奇精品一区二区三区在线观看| 神马久久久久久久| 国产99久久精品| 亚洲一区在线免费| tube8在线hd| 337p亚洲精品色噜噜狠狠| 国产精品久久久久无码av色戒| 欧美区国产区| 91精品视频大全| 第九色区av在线| 日韩欧美在线一区| www.四虎在线| 欧美阿v一级看视频| 国产精品视频中文字幕91| 视频一区二区在线播放| 午夜视频一区二区三区| 被黑人猛躁10次高潮视频| 欧美另类69xxxxx| 日本91av在线播放| 天天干天天舔天天射| 一区二区三区久久久| 天堂中文av在线| 婷婷另类小说| 成人久久久久久久| 嫩草在线视频| 制服丝袜日韩国产| 日本伦理一区二区三区| 人人精品人人爱| 日韩av电影免费观看| 色偷偷色偷偷色偷偷在线视频| 精品国产免费一区二区三区四区| 欧美成人精品一区二区免费看片 | 欧美日韩中文字幕| 欲求不满的岳中文字幕| 亚洲激情在线| 精品蜜桃一区二区三区| 三级中文字幕在线观看| 日韩久久精品成人| www.中文字幕在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩欧美不卡在线| 国偷自产视频一区二区久| 午夜精品蜜臀一区二区三区免费| 亚洲奶汁xxxx哺乳期| 亚洲成人免费在线观看| 538国产视频| 久久综合九色| 亚洲精品无人区| 欧美男男gaygay1069| 久久手机精品视频| 欧美熟女一区二区| 欧美日韩中文字幕在线视频| 国产毛片久久久久久久| 人禽交欧美网站| 99中文字幕在线观看| 在线精品自拍| 欧美在线一区二区三区四| 国产视频网址在线| 欧美精品电影在线播放| 青青草原在线免费观看| 成人av资源网站| 日本999视频| 亚洲一级毛片| 国产专区一区二区三区| 欧美日韩不卡| 久久成人在线视频| 亚洲 欧美 自拍偷拍| 在线观看一区二区精品视频| 麻豆明星ai换脸视频| 不卡欧美aaaaa| 不卡av免费在线| 欧美黄色一区| 欧美精品一区二区三区四区五区| 成人福利片在线| 欧美国产日韩一区二区在线观看| 天堂国产一区二区三区| 欧美无人高清视频在线观看| 黄页网站免费观看| 久久精品视频在线免费观看| 久久出品必属精品| 国产模特精品视频久久久久| 中文字幕久久一区| 日韩欧美ww| 91深夜福利视频| 欧美电影免费观看网站| 日韩三级成人av网| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 日本不卡一二三区| 永久免费精品视频| 国产欧美日韩中文| 中文不卡1区2区3区| 久久久精品一区二区三区| 日韩电影在线观看完整版| 欧美电影在线免费观看| 久久久久久久久久久97| 国产日韩欧美不卡在线| 手机在线观看日韩av| 免费永久网站黄欧美| 男人c女人视频| 色狮一区二区三区四区视频| 欧美凹凸一区二区三区视频| 亚洲精选av| 国产一区二区在线免费视频| 中文字幕21页在线看| 欧美精品久久一区二区| 黄视频网站在线看| 中文字幕亚洲欧美日韩高清| 欧美日韩激情视频一区二区三区| 欧美tk—视频vk| 国产精品欧美亚洲| 色狠狠av一区二区三区| 日本少妇xxxx动漫| 亚洲精品国产成人久久av盗摄| 国产肥白大熟妇bbbb视频| av激情综合网| 性感美女一区二区三区| 国产一区二区三区黄视频| 手机在线成人免费视频| 日韩成人精品在线观看| 国产精品99久久免费黑人人妻| 亚洲欧洲午夜| 免费看又黄又无码的网站| 午夜久久tv| 日韩国产成人无码av毛片| 97精品中文字幕| 一区二区三区国| 日韩欧美在线中字| 亚洲人成77777| 日韩欧美电影| 制服诱惑一区| 久久中文亚洲字幕| 亚洲成人自拍| 久久亚洲国产| 中文字幕一区二区三区有限公司 | 中文字幕免费不卡在线| 免费观看a级片| 国产精品天美传媒沈樵| 久久午夜精品视频| 国产精品不卡一区二区三区| 国产农村妇女精品一区| 国产精品乱码妇女bbbb| 婷婷国产成人精品视频| 亚洲人成网站影音先锋播放| 青草影院在线观看| 亚洲线精品一区二区三区 | 一本大道av一区二区在线播放| 亚洲精品男人天堂| 欧美性猛交xxxx乱大交退制版 | 日韩成人精品在线| 五月激情婷婷在线| 国产精品伊人色| 99热超碰在线| 久久午夜老司机| 手机看片国产日韩| 怡红院av一区二区三区| 久久久久久久国产视频| 欧美视频专区一二在线观看| 亚洲av中文无码乱人伦在线视色| 在线观看视频一区二区欧美日韩| 一级做a爱片性色毛片| 91精品婷婷国产综合久久性色| 亚洲精品一级片| 亚洲美女av黄| 麻豆av在线导航| 久久久久久999| 成人教育av| 91免费国产网站| 国产精品男女| 午夜一区二区三区| 国产精品啊啊啊| 激情网站五月天| 国产一区二区调教| 添女人荫蒂视频| 中文字幕五月欧美| 国产在线观看黄色| 欧美久久久久久蜜桃| 日本黄色免费视频| 日韩专区在线观看| 咪咪网在线视频| 91在线观看免费网站| 亚洲免费成人av在线| 久久久天堂国产精品| 久久久久久亚洲精品杨幂换脸| 911福利视频| 久久久蜜桃精品| 国产一级av毛片| 欧美色电影在线| 日本波多野结衣在线| 久久视频在线观看免费| 国模冰冰炮一区二区| 97神马电影| 日韩激情一区| 国产在线青青草| 国产成人激情av| 91制片厂在线| 日本韩国一区二区三区视频| 亚洲AV无码精品自拍| 丝袜美腿亚洲一区二区| 久久男人天堂| 成人午夜在线视频一区| 国产欧美日韩精品高清二区综合区| 国产91porn| 蜜臀久久99精品久久久久久9| 无码任你躁久久久久久老妇| 亚洲天堂中文字幕| 国产又粗又猛又爽又| 日韩高清中文字幕| 日本孕妇大胆孕交无码| 91精品综合久久久久久五月天| 国产精品欧美三级在线观看| 黄色免费福利视频| 波多野结衣视频一区| 欧美精品一区二区成人| 91精品国产综合久久久蜜臀图片| 啊v在线视频| 日本欧美在线视频| 久久悠悠精品综合网| 野外做受又硬又粗又大视频√| 国产综合久久久久久鬼色 | 女同性αv亚洲女同志| 亚洲视频一区在线| 国产精品探花视频| 最近日韩中文字幕中文| 日本精品在线一区| 日韩不卡av| 日韩精品一区第一页| 三上悠亚影音先锋| 日韩欧美第一页| 亚洲色大成网站www| 97视频在线观看成人| 噜噜噜天天躁狠狠躁夜夜精品| 日韩精品一区二区免费| 成人性生交大片免费看中文网站| 特一级黄色录像| 日韩情涩欧美日韩视频| 99热国产在线| 国产精品二区三区| 99xxxx成人网| 国产成人精品无码免费看夜聊软件| 精品久久久视频| 九九在线视频| 国产美女久久久| 欧美一区二区三区久久精品| 国产精品偷伦视频免费观看了 | www.av中文字幕| 91美女片黄在线观看91美女| www.久久久久久久| 在线视频欧美日韩| 国产精品亚洲综合在线观看 | 久久国产欧美精品| 日韩精品亚洲一区| 国产黄a三级三级| 日韩午夜激情av| 欧美日韩在线观看首页| 日韩中文字幕一区| 国内一区二区视频| 久久精品国产av一区二区三区| 亚洲国产精品资源| 天天综合网站| 精品日韩在线播放| 成人黄色小视频在线观看| 国产一区二区免费电影| 久久精品xxxxx| 中文字幕一区二区三区四区五区人| 国产乱人伦偷精品视频不卡| 国产第100页| 国产一区二区日韩| 国产精品国产亚洲精品| 黄色av网址在线播放| 国产精品丝袜在线| 韩国av免费在线观看| 国产激情视频一区| 欧美在线免费一级片| av2014天堂网| 欧美男男青年gay1069videost| 暧暧视频在线免费观看| 日本在线成人一区二区| 国产一区欧美二区| 日本一区二区三区精品| 久久精彩免费视频| 色老板在线视频一区二区| 香蕉视频999| 色婷婷久久久综合中文字幕 | 国产精品久久久久久久久久久免费看 | 日韩国产在线观看| 久久午夜无码鲁丝片|