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

快哭了!我被同事寫的代碼坑慘了

新聞
寫出整潔的代碼,是每個程序員的追求。《clean code》指出,要想寫出好的代碼,首先得知道什么是骯臟代碼、什么是整潔代碼;然后通過大量的刻意練習,才能真正寫出整潔的代碼。

寫出整潔的代碼,是每個程序員的追求。《clean code》指出,要想寫出好的代碼,首先得知道什么是骯臟代碼、什么是整潔代碼;然后通過大量的刻意練習,才能真正寫出整潔的代碼。

[[319259]]

圖片來自 Pexels

WTF/min 是衡量代碼質(zhì)量的唯一標準,Uncle Bob 在書中稱糟糕的代碼為沼澤(wading),這只突出了我們是糟糕代碼的受害者。

國內(nèi)有一個更適合的詞匯:屎山,雖然不是很文雅但是更加客觀,程序員既是受害者也是加害者。

對于什么是整潔的代碼,書中給出了大師們的總結(jié):

  • Bjarne Stroustrup:優(yōu)雅且高效;直截了當;減少依賴;只做好一件事
  • Grady booch:簡單直接
  • Dave thomas:可讀,可維護,單元測試
  • Ron Jeffries:不要重復(fù)、單一職責,表達力(Expressiveness)

其中,我最喜歡的是表達力(Expressiveness)這個描述,這個詞似乎道出了好代碼的真諦:用簡單直接的方式描繪出代碼的功能,不多也不少。

命名的藝術(shù)

坦白的說,命名是一件困難的事情,要想出一個恰到好處的命名需要一番功夫,尤其我們的母語還不是編程語言所通用的英語。

不過這一切都是值得了,好的命名讓你的代碼更直觀,更有表達力。好的命名應(yīng)該有下面的特征:

①名副其實

好的變量名告訴你:是什么東西,為什么存在,該怎么使用,如果需要通過注釋來解釋變量,那么就先得不那么名副其實了。

下面是書中的一個示例代碼,展示了命名對代碼質(zhì)量的提升:

  1. # bad code 
  2. def getItem(theList): 
  3.    ret = [] 
  4.    for x in theList: 
  5.       if x[0] == 4: 
  6.          ret.append(x) 
  7.    return ret 
  8.  
  9. # good code 
  10. def getFlaggedCell(gameBoard): 
  11.    '''掃雷游戲,flagged: 翻轉(zhuǎn)''' 
  12.    flaggedCells = [] 
  13.    for cell in gameBoard: 
  14.       if cell.IsFlagged(): 
  15.          flaggedCells.append(cell) 
  16.    return flaggedCells 

②避免誤導(dǎo)

不要掛羊頭賣狗肉,不要覆蓋慣用縮略語!

這里不得不吐槽前兩天才看到的一份代碼,居然使用了 l 作為變量名;而且,user 居然是一個 list(單復(fù)數(shù)都沒學好!!)

③有意義的區(qū)分

代碼是寫給機器執(zhí)行,也是給人閱讀的,所以概念一定要有區(qū)分度:

  1. # bad 
  2. def copy(a_list, b_list): 
  3. pass 
  4. # good 
  5. def copy(source, destination): 
  6. pass 

④使用讀的出來的單詞

如果名稱讀不出來,那么討論的時候就會像個傻鳥。

⑤使用方便搜索的命名

名字長短應(yīng)與其作用域大小相對應(yīng)!

⑥避免思維映射

比如在代碼中寫一個 temp,那么讀者就得每次看到這個單詞的時候翻譯成其真正的意義。

注釋

有表達力的代碼是無需注釋的:

  1. The proper use of comments is to compensate for our failure to express ourself in code. 

注釋的適當作用在于彌補我們用代碼表達意圖時遇到的失敗,這聽起來讓人沮喪,但事實確實如此。

The truth is in the code,注釋只是二手信息,二者的不同步或者不等價是注釋的最大問題。

書中給出了一個非常形象的例子來展示,用代碼來闡述,而非注釋:

  1. bad 
  2. // check to see if the employee is eligible for full benefit 
  3. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) 
  4. good 
  5. if (employee.isEligibleForFullBenefits()) 

因此,當想要添加注釋的時候,可以想想是否可以通過修改命名,或者修改函數(shù)(代碼)的抽象層級來展示代碼的意圖。

當然,也不能因噎廢食,書中指出了以下一些情況屬于好的注釋:

  • 法務(wù)信息
  • 對意圖的注釋,為什么要這么做
  • 警示
  • TODO 注釋
  • 放大看似不合理之物的重要性

其中個人最贊同的是第 2 點和第 5 點,做什么很容易通過命名表達,但為什么要這么做則并不直觀,特別涉及到專業(yè)知識、算法的時候。

另外,有些第一感覺“不那么優(yōu)雅”的代碼,也許有其特殊愿意,那么這樣的代碼就應(yīng)該加上注釋,說明為什么要這樣,比如為了提升關(guān)鍵路徑的性能,可能會犧牲部分代碼的可讀性。

最壞的注釋就是過時或者錯誤的注釋,這對于代碼的維護者(也許就是幾個月后的自己)是巨大的傷害,可惜除了 code review,并沒有簡單易行的方法來保證代碼與注釋的同步。

函數(shù)

①函數(shù)的單一職責

一個函數(shù)應(yīng)該只做一件事,這件事應(yīng)該能通過函數(shù)名就能清晰的展示。判斷方法很簡單:看看函數(shù)是否還能再拆出一個函數(shù)。

函數(shù)要么做什么 do_sth,要么查詢什么 query_sth。最惡心的就是函數(shù)名表示只會 query_sth,但事實上卻會 do_sth,這使得函數(shù)產(chǎn)生了副作用。

比如書中的例子:

  1. public class UserValidator { 
  2. private Cryptographer cryptographer; 
  3. public boolean checkPassword(String userName, String password) {  
  4.         User user = UserGateway.findByName(userName); 
  5. if (user != User.NULL) { 
  6. String codedPhrase = user.getPhraseEncodedByPassword();  
  7. String phrase = cryptographer.decrypt(codedPhrase, password);  
  8. if ("Valid Password".equals(phrase)) { 
  9.                 Session.initialize(); 
  10. return true;  
  11.             } 
  12.         } 
  13. return false;  
  14.     } 

②函數(shù)的抽象層級

每個函數(shù)一個抽象層次,函數(shù)中的語句都要在同一個抽象層級,不同的抽象層級不能放在一起。

比如我們想把大象放進冰箱,應(yīng)該是這個樣子的:

  1. def pushElephantIntoRefrige(): 
  2.     openRefrige() 
  3.     pushElephant() 
  4.     closeRefrige() 

函數(shù)里面的三句代碼在同一個層級(高度)描述了要完成把大象放進冰箱這件事順序相關(guān)的三個步驟。

顯然,pushElephant 這個步驟又可能包含很多子步驟,但是在 pushElephantIntoRefrige 這個層級,是無需知道太多細節(jié)的。

當我們想通過閱讀代碼的方式來了解一個新的項目時,一般都是采取廣度優(yōu)先的策略,自上而下的閱讀代碼,先了解整體結(jié)構(gòu),然后再深入感興趣的細節(jié)。

如果沒有對實現(xiàn)細節(jié)進行良好的抽象(并凝練出一個名副其實的函數(shù)),那么閱讀者就容易迷失在細節(jié)的汪洋里。

某種程度看來,這個跟金字塔原理也很像:

每一個層級都是為了論證其上一層級的觀點,同時也需要下一層級的支持;同一層級之間的多個論點又需要以某種邏輯關(guān)系排序。

pushElephantIntoRefrige 就是中心論點,需要多個子步驟的支持,同時這些子步驟之間也有邏輯先后順序。

③函數(shù)參數(shù)

函數(shù)的參數(shù)越多,組合出的輸入情況就愈多,需要的測試用例也就越多,也就越容易出問題。

輸出參數(shù)相比返回值難以理解,這點深有同感,輸出參數(shù)實在是很不直觀。從函數(shù)調(diào)用者的角度,一眼就能看出返回值,而很難識別輸出參數(shù)。輸出參數(shù)通常逼迫調(diào)用者去檢查函數(shù)簽名,這個實在不友好。

向函數(shù)傳入Boolean(書中稱之為 Flag Argument)通常不是好主意。尤其是傳入True or False后的行為并不是一件事情的兩面,而是兩件不同的事情時。

這很明顯違背了函數(shù)的單一職責約束,解決辦法很簡單,那就是用兩個函數(shù)。Dont repear yourself。

在函數(shù)這個層級,是最容易、最直觀實現(xiàn)復(fù)用的,很多 IDE 也難幫助我們講一段代碼重構(gòu)出一個函數(shù)。

不過在實踐中,也會出現(xiàn)這樣一種情況:一段代碼在多個方法中都有使用,但是又不完全一樣,如果抽象成一個通用函數(shù),那么就需要加參數(shù)、加 if else 區(qū)別。這樣就有點尷尬,貌似可以重構(gòu),但又不是很完美。

造成上述問題的某種情況是因為,這段代碼也違背了單一職責原則,做了不只一件事情,這才導(dǎo)致不好復(fù)用,解決辦法是進行方法的細分,才能更好復(fù)用。

也可以考慮 template method 來處理差異的部分。

測試

非常慚愧的是,在我經(jīng)歷的項目中,測試(尤其是單元測試)一直都沒有得到足夠的重視,也沒有試行過 TDD。正因為缺失,才更感良好測試的珍貴。

我們常說,好的代碼需要有可讀性、可維護性、可擴展性,好的代碼、架構(gòu)需要不停的重構(gòu)、迭代,但自動化測試是保證這一切的基礎(chǔ),沒有高覆蓋率的、自動化的單元測試、回歸測試,誰都不敢去修改代碼,只能任其腐爛。

即使針對核心模塊寫了單元測試,一般也很隨意,認為這只是測試代碼,配不上生產(chǎn)代碼的地位,以為只要能跑通就行了。

這就導(dǎo)致測試代碼的可讀性、可維護性非常差,然后導(dǎo)致測試代碼很難跟隨生產(chǎn)代碼一起更新、演化,最后導(dǎo)致測試代碼失效。所以說,臟測試等同于沒測試。

因此,測試代碼的三要素:

  • 可讀性
  • 可讀性
  • 可讀性

對于測試的原則、準則如下:

  • 沒有測試之前不要寫任何功能代碼
  • 只編寫恰好能夠體現(xiàn)一個失敗情況的測試代碼
  • 只編寫恰好能通過測試的功能代碼

測試的 FIRST 準則:

  • 快速(Fast)測試應(yīng)該夠快,盡量自動化。
  • 獨立(Independent)測試應(yīng)該應(yīng)該獨立。不要相互依賴
  • 可重復(fù)(Repeatable)測試應(yīng)該在任何環(huán)境上都能重復(fù)通過。
  • 自我驗證(Self-Validating)測試應(yīng)該有 bool 輸出。不要通過查看日志這種低效率方式來判斷測試是否通過。
  • 及時(Timely)測試應(yīng)該及時編寫,在其對應(yīng)的生產(chǎn)代碼之前編寫。

 

責任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2024-08-21 08:22:33

2024-03-14 10:30:05

緩存場景DEMO

2021-07-16 07:57:35

SpringBootOpenFeign微服務(wù)

2022-03-23 08:01:04

Python語言代碼

2025-04-22 03:00:00

模型SpringAI

2019-06-18 11:09:54

2021-09-29 09:07:22

Docker 日志容器

2021-12-27 07:25:13

項目軟件開發(fā)

2020-04-07 08:00:02

Redis緩存數(shù)據(jù)

2021-01-18 11:27:03

Istio架構(gòu)云環(huán)境

2020-10-21 12:10:30

訂單號Java代碼

2020-09-27 10:55:10

代碼Java字符串

2021-12-03 11:57:27

代碼##語言

2020-05-15 09:30:12

代碼函數(shù)語言

2019-08-12 15:51:26

SSD存儲產(chǎn)品

2020-09-25 08:58:43

推薦系統(tǒng)業(yè)務(wù)

2020-02-20 10:45:57

代碼JS開發(fā)

2021-04-13 05:40:01

抓包藍屏Linux

2021-09-07 15:41:35

Bug誘因代碼

2019-02-12 15:00:32

Javascript命令式編程前端
點贊
收藏

51CTO技術(shù)棧公眾號

国产在线视频你懂的| 午夜免费福利网站| 福利小视频在线观看| 蜜桃一区二区三区在线| 日韩中文在线视频| 国产女同无遮挡互慰高潮91| www.综合| 亚洲天堂精品视频| 蜜桃视频日韩| jizz中国少妇| 丝袜亚洲另类欧美综合| 免费av一区二区| 亚洲欧美色图视频| 日韩中文字幕视频网| 色婷婷精品大在线视频| 欧美 日韩 国产精品| 久草在线青青草| 国产精品乡下勾搭老头1| 日韩av手机在线观看| 欧美毛片在线观看| 色婷婷综合网| 99riav一区二区三区| 国产成人涩涩涩视频在线观看| 91在线播放观看| 日本黄色精品| 日韩精品免费在线视频观看| 欧美性猛交乱大交| 青青青国产精品| 色综合久久久久久久| 999一区二区三区| 黄色网在线免费看| 欧美国产日韩精品免费观看| 国产一区二区三区黄| 国产精品嫩草影院桃色| 日本不卡视频在线| 欧洲成人午夜免费大片| 日本在线免费观看| 黑丝一区二区三区| 久久亚洲一区二区三区四区五区高 | 久久久久中文字幕亚洲精品| 91成人在线| 欧美亚洲禁片免费| 成人免费视频久久| 免费成人动漫| 日本乱码高清不卡字幕| 美脚丝袜一区二区三区在线观看| 国产女人高潮时对白| 久久精品国产一区二区三 | 欧美一二三区视频| 极品av少妇一区二区| 久久99国产综合精品女同 | 亚洲情侣在线| 久久精品99无色码中文字幕| 亚洲精品自拍视频在线观看| 奇米影视亚洲| 原创国产精品91| 中文字幕伦理片| 日韩精品免费| 久久久999精品免费| 麻豆明星ai换脸视频| 亚洲国产精品久久久天堂| 深夜福利国产精品| 中国1级黄色片| 忘忧草精品久久久久久久高清| 色偷偷av一区二区三区乱| 精品国产国产综合精品| 我不卡神马影院| 欧美精品18videosex性欧美| 日本三级免费看| 亚洲制服av| 国产精品久久二区| 91黄色在线视频| 国产米奇在线777精品观看| 91香蕉视频在线下载| 亚洲精品无遮挡| 久久综合狠狠综合久久激情| 色一情一乱一伦一区二区三欧美| 在线看av的网址| 亚洲天堂a在线| 无码人妻少妇伦在线电影| 欧亚av在线| 欧美体内she精视频| 日本精品一区在线| 欧美调教在线| 中文字幕亚洲无线码a| 欧美成人aaa片一区国产精品| 亚洲美女网站| 国产精品久久久久久久久粉嫩av| 国产情侣av在线| 99精品视频在线播放观看| 欧洲国产精品| 色噜噜狠狠狠综合欧洲色8| 欧美日韩国产激情| 中文av一区二区三区| 欧美经典一区| 亚洲视频在线观看视频| 久久久久久久久毛片| 香蕉久久国产| 亚洲曰本av电影| 日韩精品视频无播放器在线看 | 亚洲精品国产品国语在线| 国产jjizz一区二区三区视频| 99久久精品费精品国产风间由美 | 久久免费视频6| 日日摸夜夜添夜夜添精品视频 | 中文字幕不卡一区| 大荫蒂性生交片| xxxxx.日韩| 亚洲国产天堂久久综合网| 五月天婷婷丁香网| 国产女优一区| 97超级碰碰| h视频在线免费| 黄色91在线观看| 亚洲综合在线一区二区| 国产一区99| 国外成人免费在线播放| 国产不卡精品视频| 中文av一区特黄| 久草精品在线播放| 欧美巨大xxxx| 欧美激情综合色| 国产视频在线观看视频| 欧美韩国日本一区| 97xxxxx| 国产图片一区| 九九热最新视频//这里只有精品| 少妇无套内谢久久久久| 91丨porny丨国产| av网站手机在线观看| 美女日韩一区| 久久精品国产视频| 国产精品51麻豆cm传媒| 久久亚洲影视婷婷| 成人免费毛片网| 日韩三级av| 97精品国产97久久久久久免费| www.久久成人| 亚洲黄色尤物视频| 不卡中文字幕在线观看| 不卡在线一区| 国产久一一精品| 成人综合影院| 欧美性猛交xxxx黑人交| 亚洲天堂久久新| 日韩精品1区2区3区| 欧美日韩在线不卡一区| 毛片无码国产| 在线观看国产欧美| 中文字幕福利视频| 国产精品伦一区| 99精品999| 亚洲女同中文字幕| 成人欧美一区二区三区黑人免费| 中文字幕有码在线观看| 欧美一区二区性放荡片| 91精品国产高清一区二区三蜜臀| 国产乱一区二区| 肉大捧一出免费观看网站在线播放| 精品国产欧美| 欧美精品成人91久久久久久久| 高清一区二区三区四区| 亚洲福利国产精品| 少妇按摩一区二区三区| 日韩黄色小视频| 一区中文字幕在线观看| 日韩08精品| 97精品国产97久久久久久| 欧美视频免费一区二区三区| 91国偷自产一区二区开放时间 | 午夜久久久久久| 国产精品第七页| 日韩成人一级大片| 中文字幕一区二区中文字幕| 一区三区自拍| 欧美有码在线视频| 99青草视频在线播放视| 欧美一级搡bbbb搡bbbb| 国产91av视频| 中文幕一区二区三区久久蜜桃| 亚洲精品国产久| 亚洲美女一区| 一区二区日本伦理| 18国产精品| 国产精品久久久久久影视| 成人黄视频在线观看| 亚洲韩国欧洲国产日产av| 看黄色一级大片| 一区二区三区在线视频观看58| 韩国无码一区二区三区精品| 美女www一区二区| av在线播放亚洲| 色一区二区三区四区| 国产一区二区三区色淫影院| 岛国精品在线| 66m—66摸成人免费视频| 欧美性天天影视| 日韩高清有码在线| 国产精品一二三四五区| 日韩欧美一区视频| 欧美xxxx黑人xyx性爽| 国产亚洲一区二区在线观看| 国产精品嫩草69影院| 麻豆91在线播放免费| 日韩小视频在线播放| 国产精品久久观看| 欧美日韩国产不卡在线看| 亚洲乱码一区| 国产日韩欧美成人| 三上悠亚亚洲一区| 国内精品国产三级国产在线专| 91青青在线视频| 日韩精品小视频| 超碰在线人人干| 制服丝袜国产精品| 色婷婷久久综合中文久久蜜桃av| 五月婷婷欧美视频| 欧美极品aaaaabbbbb| 国产精品天干天干在线综合| 国产美女精品久久| 99视频超级精品| www国产视频| 国产精品一区二区视频| 在线观看国产福利| 免费成人你懂的| 国产一区二区视频免费在线观看| 亚洲国产高清视频| 乱熟女高潮一区二区在线| 91精品国产麻豆国产在线观看 | 欧美成熟视频| 中文精品视频一区二区在线观看| 精品一二三区| 日本在线观看一区二区三区| 久久91成人| 久久人人九九| 中日韩免视频上线全都免费| 麻豆久久久av免费| 色天天色综合| 久久综合九色综合久99| 天堂在线精品| 麻豆传媒一区| 国产欧美一区二区精品久久久| 久久亚洲国产精品日日av夜夜| 日韩系列在线| 美日韩免费视频| 亚洲区小说区图片区qvod按摩| 精品无码久久久久久久动漫| 久9re热视频这里只有精品| 国产福利一区二区三区在线观看| 午夜日韩影院| 国产在线一区二区三区四区| 麻豆精品99| 欧美不卡三区| 欧美另类69xxxxx| 一区二区三区av| 欧美有码视频| 青青草精品视频在线| 99国产精品久久久久久久成人热| 男人天堂1024| 奇米综合一区二区三区精品视频| 欧美婷婷精品激情| 国产一区二区三区免费看| 丰满人妻一区二区三区53视频| 国产99一区视频免费 | 成人在线视频你懂的| 好吊色欧美一区二区三区四区| 巨人精品**| 日本在线观看不卡| 中文无码久久精品| 久艹视频在线免费观看| 日韩精品视频网站| 五月天开心婷婷| 成人动漫中文字幕| 日韩人妻无码精品综合区| 中文字幕在线免费不卡| 欧美日韩在线国产| 色综合久久99| 国产免费一区二区三区免费视频| 日韩区在线观看| 飘雪影院手机免费高清版在线观看| 在线观看国产成人av片| 尤物在线网址| 日本国产欧美一区二区三区| 亚洲国产aⅴ精品一区二区三区| ts人妖另类在线| 国产探花在线精品| 青青视频免费在线观看| 国产精品久久久亚洲一区| 久久国产精品国产精品| 不卡一区在线观看| 欧美黄色高清视频| 亚洲一区二区三区四区的| 无码人妻精品一区二区| 日韩一区二区电影网| 久香视频在线观看| 精品自在线视频| 日本精品裸体写真集在线观看| 91国产丝袜在线放| 国模吧精品视频| 国产www免费| 国产中文字幕精品| 在线免费看黄视频| 亚洲一区二区三区在线看| 中文在线免费观看| 亚洲精品www久久久| 麻豆视频网站在线观看| 欧洲日本亚洲国产区| 涩涩屋成人免费视频软件| 亚洲v国产v在线观看| 一区二区动漫| 自拍偷拍激情视频| 国产精品久久福利| 无码人妻精品一区二区| 亚洲韩国日本中文字幕| 亚洲小说区图片| 国产在线精品一区免费香蕉| 国产日产一区| 亚洲熟妇av日韩熟妇在线| 国产一区在线观看视频| 国产欧美小视频| 一本大道综合伊人精品热热| 日本成人动漫在线观看| 久久综合伊人77777| 亚洲精品555| 日本一区美女| 母乳一区在线观看| 野花社区视频在线观看| 午夜精品免费在线| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 精品国产免费人成在线观看| 黄av在线播放| 成人午夜黄色影院| 久久精品免费一区二区三区| 一区二区xxx| 国产亚洲欧美中文| 日本久久综合网| 亚洲免费人成在线视频观看| 欧美激情20| 久久视频在线观看中文字幕| 亚洲国产精品一区制服丝袜| 国产乱国产乱老熟300部视频| 依依成人综合视频| 动漫av一区二区三区| 欧美激情精品久久久久久蜜臀| 日韩在线视频一区二区三区| 国产精品一二三在线观看| 国产在线麻豆精品观看| 国产午夜手机精彩视频| 制服丝袜中文字幕亚洲| а√天堂官网中文在线| 亚洲在线一区二区| 欧美日韩综合| 无码人妻精品一区二区三| 亚洲一二三区不卡| 午夜福利理论片在线观看| 91高清视频免费| 小嫩嫩12欧美| xxxx一级片| 亚洲视频1区2区| 成人午夜免费在线观看| 18久久久久久| 不卡中文字幕| 欧美体内she精高潮| 亚洲国产综合人成综合网站| 午夜av免费在线观看| 国产精品美腿一区在线看| 我不卡影院28| 大桥未久恸哭の女教师| 色94色欧美sute亚洲线路一久| 日本在线视频网| 粉嫩精品一区二区三区在线观看| 国产婷婷精品| 最新日韩免费视频| 欧美成人bangbros| 中老年在线免费视频| 亚洲啪啪av| 懂色av一区二区在线播放| 日本免费在线观看视频| 丝袜亚洲另类欧美重口| 亚洲视频国产| 日本999视频| 亚洲精品乱码久久久久久| 污污的视频网站在线观看| 国产精品久久久久久av福利软件 | 91精品国产91久久久久久| 国模吧精品视频| 国产女主播在线播放| 在线亚洲高清视频| 秋霞在线视频| 日韩电影免费观看高清完整| 国产69精品久久久久777| 国产美女www| 久久久久久一区二区三区| 成人一二三区| 午夜视频在线观看国产| 欧美精品v国产精品v日韩精品 | 国产美女搞久久| 亚洲青涩在线| 裸体武打性艳史| 亚洲天堂影视av|