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

如何有效的解決代碼的圈復雜度

開發 前端
不過最后我們也看到了,實際上,只是刻板的使用圈復雜度的算法,去度量一個段代碼的清晰度,有時候也是不可取的,所以我們在重構系統的時候,可以通過圈復雜度的工具,進行復雜度的統計,然后對復雜度高的代碼,具體場景,具體分析。而不能一味的教條。

作者:京東零售 張學剛

背景介紹

不管小型公司還是大型互聯網公司,很多項目債臺高筑,新功能開發困難。其中一個很大的原因就是代碼復雜,可讀性差。Sonar開發團隊曾上綱上線的戲稱開發人員的7宗罪,其中很關鍵的一條就是“復雜度”。那復雜度有沒有一個明確的衡量標準,我們又如何去解決代碼的圈復雜度呢?今天我在這里和大家聊一下。

圈復雜度的計算方法

我們先來看一下圈復雜度與代碼質量以及測試和維護成本之間的一個關系。

我們可以看到當圈復雜度,在1-10之間的時候,代碼是清晰,結構化的。可測試性比較高,維護成本也比較低。隨著圈復雜度的升高,代碼的狀況開始惡化,當大于30的時候,代碼已經逐步變為不可讀,維護成本非常高。

點邊計算法

那圈復雜度是如何計算的呢,常用的第一種方法叫做點邊計算法,它圈復雜度的計算方式 V(G) = E ? N + 2,我們用下邊圖來解釋一下這個公式:

其中公式之中的E指的是控制流圖中邊的數量,N指的是控制流圖中的節點數量。這兩個圖形指的就是控制流圖。那我們可以計算一下,第一個控制流圖的圈復雜度是:4-4+2=2.

節點判定法

除此之外圈復雜度還有一種更為直觀的計算方法,因為圈復雜度實際上體現了“判定條件”的數量,所以圈復雜度實際上就是等于判定節點的數量再加上1。它的計算公式為:V (G) = P + 1 其中判定節點(P)指的是我們常用的分支語句。例如if語句、while語句、case語句等。

那如何來降低圈復雜度呢?

圈復雜度的常用解決方法

提煉函數

接下來我們重點介紹一些降低圈復雜的方法,我通過工作中常見的代碼,來表述一下,如何去降低復雜度,如果你有更好的方法,也歡迎留言跟我交流。在我們的工作中,做業務系統的時候,通過異步消息進行數據傳遞,是比較常用的一種方式,在我們監聽到對端系統的消息的時候,一般會做這幾件事情。判斷消息是否為空-->轉換消息為數據傳輸對象DTO-->進一步的判斷對象的數據是否合法-->進行業務邏輯的處理。這幾個典型的步驟,很多童鞋可能用左邊圖的方式進行處理。這個時候,如果每一個步驟的方法比較復雜的時候,這個總的方法會非常復雜,這個時候,我們可以通過提煉方法的方式,對高內聚的操作,提煉到一個獨立的方法中,來分治復雜性。??

使用衛語句

我們知道圈復雜度的一個因素就是分支語句多,我們在寫業務代碼的時候,常見到這樣的一種代碼,if-then-else的層層嵌套。衛語句的原則是,如果某個條件極其罕見,就應該單獨檢查該條件,并在該條件為真時,立刻返回。下面是一個生產中的場景,如果記賬請求落庫成功后就進行余額的操作,如果不成功就返回失敗結果。因為落庫失敗是不常見的,所以我們采用衛語句的方式,來減少分支語句。讓代碼更清晰。

合并條件

經常遇到一種情況,我們對錯誤的處理,需要返回給調用方,內部的錯誤碼,為了方便快讀的定位錯誤會非常詳細,但是對外可能會泛化這種錯誤碼,這個時候我們可以通過合并條件的方式,簡化條件分支,來降低圈復雜度。下面是一個生產中的場景,如果記賬失敗,則對錯誤結果進行包裝處理,并返回給調用方。這個時候我們可以將錯誤碼合并,這里它是合并到map中,然后針對這組錯誤碼統一進行了處理。??

通過多態方式替代條件式

在我們開發中,如果是一個平臺化的系統,很多時候,有這樣的需求。例如:不同的租戶、不同的業務甚至不同的訂單類型都會有不同的處理流程。 這個時候最簡單的方式,就是通過條件分支來進行不同的處理。但是當業務繁多的時候,處理分支會顯得混亂,從而導致圈復雜度的升高,這個時候我們通過利用多態的方式,可以有效的降低復雜度。我們看一下下邊這段代碼,不同的訂單類型,使用不同的處理流程,這里他使用了在枚舉中實現多態的方式。我們發現,其實他是實現了工廠模式。

替換算法

復雜算法會導致bug可能性的增加及可理解性/可維護性的降低,如果函數對性能要求不高,提倡使用簡單明了的算法。這里我引用了重構中的一個例子,我們可以一起看一下。這里傳入一個人名的數組,如果數組中包含指定的名稱,就立即返回名稱。??

分解條件式

在面對大塊頭的代碼時,你可以通過提煉方法的方式,將它分解為多個方法。根據每個小塊代碼的用途,命名新的方法名。對于條件邏輯,將每個分支條件分解成新方法可以突出條件邏輯,并更清楚的表達每個分支的作用。比如下面的例子中,夏季的時候商品的折扣和非夏天的商品折扣,是不同的計算方法。 這個時候,我們可以把兩種算法,提煉到兩個不同的方法中.??

移除控制標記

有時候我們會通過控制標記來對循環進行處理,我們看一下這樣的一段經常使用的代碼,同一個數組列表中查找罪惡的人,匹配到任意一個罪惡的人后返回。這里found是控制標記,我們可通過下邊的方式去掉控制標記,來減少一層循環,達到削減復雜度的效果。

圈復雜度的思辨

那是不是當我們檢測到圈復雜度高的時候他就一定復雜呢,下面的代碼是一個生產上的例子,他通過傳入的MQ的名字,對MQ進行手動的暫停。這個地方實際上是可以通過mq的名稱,從spring的容器中,獲取bean的。這里的例子主要是讓大家看到,雖然,這個分支比較多,但是這種扁平化的結構可讀性還是可以的。不過如果它做的不僅僅是一個暫停的操作,而是一個很復雜的操作,這個時候,可能就需要通過提煉方法的方式進行重構。如果提煉方法重構后,這個類還是過長,那就需要我們通過使用多態的特性,利用工廠模式等方式進行進一步的重構。如果一開始我們就通過應用一些復雜的設計模式進行重構,就會存在過度設計的弊端,使代碼更不易于理解.??

總結

首先介紹了什么是圈復雜度,然后介紹了解決圈復雜度的幾種方法。

通過圈復雜度計算的兩種方式我們可以看到,圈復雜度的核心是分支語句。那解決問題的核心就集中在如何去減少分支語句。

不過最后我們也看到了,實際上,只是刻板的使用圈復雜度的算法,去度量一個段代碼的清晰度,有時候也是不可取的,所以我們在重構系統的時候,可以通過圈復雜度的工具,進行復雜度的統計,然后對復雜度高的代碼,具體場景,具體分析。而不能一味的教條。

最后我們通過思維導圖來梳理一下:??

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-12-30 09:20:27

代碼

2022-08-16 09:04:23

代碼圈圈復雜度節點

2019-10-14 17:00:14

前端代碼圈復雜度

2024-06-05 09:35:00

2023-10-05 11:08:53

2013-08-01 13:18:41

代碼

2024-04-25 08:33:25

算法時間復雜度空間復雜度

2015-10-13 09:43:43

復雜度核心

2019-12-24 09:46:00

Linux設置密碼

2024-07-30 10:55:25

2021-09-17 10:44:50

算法復雜度空間

2019-11-18 12:41:35

算法Python計算復雜性理論

2021-10-15 09:43:12

希爾排序復雜度

2021-01-05 10:41:42

算法時間空間

2022-08-25 11:00:19

編程系統

2009-07-09 10:45:16

C#基本概念復雜度遞歸與接口

2018-12-18 10:11:37

軟件復雜度軟件系統軟件開發

2024-08-22 14:39:34

2019-01-02 05:55:30

領域驅動軟件復雜度

2024-05-20 09:04:29

時間復雜度代碼
點贊
收藏

51CTO技術棧公眾號

国产有码在线一区二区视频| 亚洲精品国产拍免费91在线| 中文字幕人成一区| va视频在线观看| 中文欧美日韩| 中文字幕亚洲二区| 日本中文字幕在线不卡| 热三久草你在线| 国产精品久久久久一区| 99r国产精品视频| 亚洲毛片一区二区三区| 国产精品99在线观看| 亚洲福利视频专区| 欧美日韩在线观看不卡| h片在线观看| 国产清纯在线一区二区www| 92福利视频午夜1000合集在线观看| 日本污视频在线观看| 色乱码一区二区三区网站| 亚洲第一页中文字幕| www.com黄色片| 国产夫妻在线播放| 亚洲欧美日韩中文字幕一区二区三区| 久热这里只精品99re8久| 国产又粗又大又爽视频| 香蕉久久a毛片| 欧美华人在线视频| 91免费在线看片| 亚洲三级网页| 欧美精品一区二区高清在线观看| 国产三级精品三级在线| 国产亚洲一区二区手机在线观看| 亚洲高清三级视频| 无码人妻精品一区二区三区99v| 国产精品一级伦理| 成人av免费在线播放| 96sao精品视频在线观看| 欧美超碰在线观看| 久久xxxx精品视频| 777777777亚洲妇女| 麻豆一区二区三区精品视频| 婷婷久久国产对白刺激五月99| 日韩国产精品视频| 人妻 日韩 欧美 综合 制服| 国产精品成人3p一区二区三区| 欧美日韩亚洲综合在线 | 精品美女在线观看视频在线观看| 久久先锋影音av| 久久天堂国产精品| 午夜激情小视频| 91影院在线观看| 精品久久久久久中文字幕动漫| 亚洲精品成人电影| 粉嫩av一区二区三区粉嫩| 91精品视频专区| 国产精品玖玖玖| 免费成人在线视频观看| 国产精品一区二区性色av| 在线亚洲欧美日韩| 蓝色福利精品导航| 成人激情在线播放| www黄色网址| 成人综合婷婷国产精品久久蜜臀| julia一区二区中文久久94| 超碰福利在线观看| 成人黄色综合网站| 久久久亚洲综合网站| 九色在线观看视频| 国产精品无遮挡| 中文字幕在线乱| 男人天堂亚洲| 狠狠综合久久av一区二区小说 | 毛片av一区二区| 亚洲最大福利视频网| 国精品人妻无码一区二区三区喝尿| 国产不卡视频在线播放| 精品国产一区二区三区四区vr| 欧美女同网站| 国产精品第四页| 久久久天堂国产精品| av在线播放资源| 欧美在线视频全部完| 婷婷激情小说网| 欧美日韩看看2015永久免费| 亚洲欧美综合区自拍另类| jizzjizzjizz国产| 红桃视频欧美| 国产精品视频免费观看www| 国产视频在线观看免费| av不卡在线播放| 亚洲三级一区| www.综合| 欧美一区二区三区在线看| 深田咏美中文字幕| 日韩中文在线电影| 午夜精品一区二区三区在线视 | 日韩精品一区二区三区四区| 手机在线看片日韩| 香蕉精品视频在线观看| 韩国三级日本三级少妇99| 亚洲熟妇av乱码在线观看| 丁香婷婷综合五月| 亚洲不卡一卡2卡三卡4卡5卡精品| 免费人成在线观看播放视频| 精品久久久久久亚洲精品| 永久免费的av网站| 亚洲欧洲av| 欧美高清电影在线看| 中文字幕av影视| 99久久精品国产毛片| 亚洲国产精品女人| 福利一区和二区| 亚洲精品狠狠操| 欧美精品一级片| 另类中文字幕网| 欧美亚洲爱爱另类综合| 91av久久| 精品国产免费一区二区三区四区 | 黄色工厂这里只有精品| 国产欧美精品一区二区三区-老狼| 视频污在线观看| 亚洲精品国产a| 久久久久国产一区| 免费一区二区三区视频导航| 欧美激情aaaa| 国产乱叫456在线| 国产精品午夜在线观看| 成人免费观看毛片| 另类ts人妖一区二区三区| 久久久久国产一区二区三区| 91女人18毛片水多国产| 国产清纯在线一区二区www| 国产女女做受ⅹxx高潮| 国内精品麻豆美女在线播放视频 | 国产伊人久久| 国产一区二区三区视频在线观看| 在线观看亚洲天堂| av在线播放成人| 六月婷婷在线视频| 黑人久久a级毛片免费观看| 不卡av日日日| 国产高清免费在线观看| 亚洲免费观看高清在线观看| 在线黄色免费看| 久久久9色精品国产一区二区三区| 国产欧美日韩最新| 在线激情小视频| 欧美丰满一区二区免费视频| 三上悠亚作品在线观看| 九九九久久久精品| 黑人巨大国产9丨视频| 嫩呦国产一区二区三区av| 免费av一区二区| 午夜精品久久久久久久99| 一区二区欧美视频| 亚洲av成人片无码| 国产一级久久| 日韩区国产区| 日本午夜精品久久久久| 久久香蕉国产线看观看网| 国产毛片毛片毛片毛片| 亚洲激情图片小说视频| 中国特级黄色大片| 另类图片国产| 在线国产99| 一区二区三区欧洲区| 91精品国产高清久久久久久久久 | 99视频在线视频| 国产精品黑丝在线播放| 99久久国产免费免费| yellow字幕网在线| 亚洲视频自拍偷拍| 一卡二卡三卡在线观看| 一区二区三区欧美在线观看| 中文字幕乱码一区| 日本欧美大码aⅴ在线播放| 在线天堂一区av电影| 99久久人爽人人添人人澡 | 色综合视频一区二区三区44| 欧美激情xxxxx| 欧美偷拍视频| 欧美日韩高清一区二区不卡| 久久久久久天堂| 久久一夜天堂av一区二区三区 | jlzzjlzz亚洲日本少妇| 久久久国产欧美| 欧美精品99| 日韩电影免费观看在| 国产免费区一区二区三视频免费 | 91原创在线视频| 日本美女视频一区| 一本色道88久久加勒比精品| 亚洲日本japanese丝袜| 欧美人与动xxxxz0oz| 国产中文日韩欧美| 色黄视频在线观看| 久久伊人色综合| 黄色免费在线播放| 精品国产乱码久久久久久夜甘婷婷 | 日本激情一区| 国产视频99| 国产精品毛片aⅴ一区二区三区| 91av网站在线播放| 97caopron在线视频| 一色桃子一区二区| 日本高清视频www| 91麻豆精品国产91久久久| 亚洲欧美自拍视频| 亚洲丶国产丶欧美一区二区三区| 精品亚洲乱码一区二区| 国产亚洲欧洲997久久综合 | 一卡二卡三卡日韩欧美| 老头老太做爰xxx视频| 成人午夜精品在线| 三日本三级少妇三级99| 日韩和欧美一区二区三区| 国产中文字幕乱人伦在线观看| 欧美电影免费| 日韩精品久久一区二区三区| 久久久久97| 国产精品久久久久久久小唯西川| 国产成年精品| 国产在线拍揄自揄视频不卡99| 另类中文字幕国产精品| 日产日韩在线亚洲欧美| 精品捆绑调教一区二区三区| 欧美华人在线视频| 三级福利片在线观看| 久久精品国产免费观看| 日本a在线播放| 日韩最新av在线| 成年网站在线| 一区二区三区久久精品| 黄色毛片在线看| 亚洲欧美精品一区二区| 少妇一级淫片免费看| 精品日韩在线观看| 亚洲AV无码一区二区三区少妇 | 国产精品情侣自拍| 黄色精品视频| 国产精品视频男人的天堂| 日韩天堂在线| 国产精品69久久| 78精品国产综合久久香蕉| 国产精品精品视频一区二区三区| 免费欧美电影| 国产日韩欧美黄色| 97久久中文字幕| 亚洲a级在线播放观看| 精品精品视频| ts人妖另类在线| 老牛国内精品亚洲成av人片| 久精品国产欧美| 精品午夜久久| 黄瓜视频免费观看在线观看www| 羞羞色午夜精品一区二区三区| www.午夜色| 欧美二区视频| 免费一级特黄特色毛片久久看| 99精品国产一区二区青青牛奶| 久久久久久久中文| 欧美aaaaaa午夜精品| 一个色综合久久| 国产精一区二区三区| 亚洲精品第二页| 国产亚洲精久久久久久| 一级片一级片一级片| 亚洲一区二区不卡免费| 国产一级做a爱片久久毛片a| 欧美中文字幕一区二区三区亚洲| 亚洲天堂网在线视频| 日韩欧美精品在线视频| 亚洲日本国产精品| 在线亚洲欧美视频| 久久香蕉av| 日本精品免费观看| crdy在线观看欧美| 国产一区二区久久久| 精品久久电影| 亚洲精品久久久久久久蜜桃臀| 老司机一区二区三区| 日韩av片专区| 91女厕偷拍女厕偷拍高清| 天堂网av2018| 欧美特黄级在线| 国产精品久久久久久无人区| 亚洲成人中文字幕| 2017亚洲天堂1024| 97视频免费在线看| 少妇精品视频在线观看| 九九九九久久久久| 97在线精品| 日韩a在线播放| 国产精品综合久久| 亚洲成人黄色av| 亚洲一区二区三区中文字幕在线| 日本黄色一级视频| 欧美精品一区二区三区蜜桃| eeuss影院www在线观看| 97欧美精品一区二区三区| 亚洲欧洲二区| 日本视频精品一区| 亚洲精品一二| 亚洲一二区在线观看| 久久精品亚洲麻豆av一区二区| 欧美成人精品欧美一级| 欧美综合亚洲图片综合区| 亚洲精品久久久狠狠狠爱| 中文字幕欧美日韩va免费视频| 91超碰国产在线| 51成人做爰www免费看网站| 免费精品国产| 免费成人在线视频网站| 国产aⅴ精品一区二区三区色成熟| 超薄肉色丝袜一二三| 欧美日韩亚洲91| 亚洲国产一二三区| 久久精品一本久久99精品| 欧美成人精品一区二区男人小说| 国产一区二区三区av在线| 午夜久久久久| 天美一区二区三区| 国产精品美女久久久久av爽李琼| 欧美a视频在线观看| 亚洲精品wwww| 国产精品xx| 国产亚洲一区二区三区在线播放| 欧美日韩在线大尺度| 一级黄色片在线免费观看| 中文字幕中文字幕在线一区| 波多野结衣毛片| 伊人一区二区三区久久精品 | 91久久久久久国产精品| 日韩88av| 一路向西2在线观看| 欧美国产精品专区| 在线观看国产区| 一区二区在线视频| 久久精品国产福利| 亚洲草草视频| 狠狠色狠狠色合久久伊人| 182在线观看视频| 欧美一区在线视频| 黄色av电影在线观看| 亚洲a区在线视频| 亚洲电影影音先锋| 亚洲 自拍 另类 欧美 丝袜| 亚洲免费观看高清在线观看| 国内老熟妇对白hdxxxx| 欧美日韩爱爱视频| 久久久免费毛片| 亚洲午夜精品久久久久久人妖| 91蜜桃网址入口| 中文字幕视频二区| 久久久精品国产| 操欧美女人视频| 日韩中文字幕免费在线 | 印度午夜性春猛xxx交| 欧美一区二区三级| 俺来俺也去www色在线观看| 国产一区精品视频| 视频精品一区二区| 欧美性生给视频| 日韩免费性生活视频播放| av影院在线| 日本欧美精品久久久| 黄色精品一二区| 日本午夜小视频| 伊人av综合网| 亚洲国产欧美在线观看| 国产黄页在线观看| 国产日韩欧美麻豆| www.黄色片| 7m第一福利500精品视频| 日韩电影免费网址| 性色av浪潮av| 一本久道中文字幕精品亚洲嫩| 91社区在线| 国产精品一区二区三区在线| 视频一区在线视频| www青青草原| 亚洲人成在线播放| 国产一区一区| 免费av网址在线| 亚洲你懂的在线视频| 免费观看成年在线视频网站| 国产精品一区二区久久久久| 亚洲一级一区| 国产第一页精品| 亚洲电影免费观看高清完整版在线| 欧美一区久久久| 黄色一级片国产| 日本一区二区视频在线| 午夜精品久久久久久久爽| 国产不卡精品视男人的天堂| 国产精品地址| 在线视频这里只有精品| 日韩精品极品视频| 久久免费精品| 色播五月综合网|