精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久久久这里只有精品| 欧美日韩免费观看一区二区三区| 国产精品一区二区你懂得| 国产美女激情视频| 久久中文字幕av一区二区不卡| 91精品国模一区二区三区| bt天堂新版中文在线地址| 日韩电影在线观看完整版| 奇米影视一区二区三区| 欧美激情第三页| 免费看91的网站| 136国产福利精品导航网址应用| 五月天国产精品| 一区二区三区av| 水莓100在线视频| 国产一区二区三区高清播放| 欧美一区二三区| 精品自拍偷拍视频| 精品高清在线| 亚洲国产99精品国自产| 性生活免费在线观看| av丝袜在线| 中文字幕制服丝袜成人av| 美脚丝袜一区二区三区在线观看| 11024精品一区二区三区日韩| 99国产精品私拍| 美女福利视频一区| 国产性猛交xx乱| 色愁久久久久久| 欧美大黄免费观看| 国内av一区二区| 超薄肉色丝袜脚交一区二区| 性做久久久久久免费观看| 桥本有菜av在线| 福利视频在线播放| ww久久中文字幕| 国产精品一区二区三区精品| va视频在线观看| 极品美女销魂一区二区三区 | 无码人妻aⅴ一区二区三区69岛| 日韩视频一区二区三区四区| 91麻豆精品国产综合久久久久久 | 国产小视频在线观看免费| 亚洲成人国产| 久久久精品一区二区| 国产三级黄色片| 成人影院天天5g天天爽无毒影院| 亚洲欧美中文字幕在线一区| 成人网站免费观看| 欧美电影在线观看完整版| 欧美精品一区二区高清在线观看| 女人扒开双腿让男人捅| 精品91福利视频| 91精品国产综合久久精品| av噜噜在线观看| 99精品国产九九国产精品| 欧美精品色综合| 日韩 国产 一区| 久久影院一区二区三区| 欧美一级精品在线| 理论片大全免费理伦片| 欧美美女在线直播| 亚洲视频第一页| 欧美激情久久久久久久| 五月婷婷亚洲| 欧美韩国理论所午夜片917电影| 久久亚洲成人av| 在线欧美三区| 国产mv免费观看入口亚洲| 秋霞精品一区二区三区| 奇米精品一区二区三区在线观看| 国产精品免费一区二区三区都可以| 亚洲精品无码久久久久| 精久久久久久久久久久| 岛国视频一区免费观看| 日色在线视频| 国产精品国产精品国产专区不蜜| 欧美日韩在线免费观看视频| 肉体视频在线| 岛国精品视频在线播放| 别急慢慢来1978如如2| 欧美一级在线| 精品国产一区二区三区四区四| 91丝袜在线观看| 成人在线免费观看网站| 久久高清视频免费| 国产www在线| 精品一区二区在线播放| 国产精品日韩一区二区三区| 日本一二三区在线视频| 中文字幕日韩一区二区| 国产精品999视频| www.成人在线视频| 精品日产卡一卡二卡麻豆| 色婷婷av777| 亚洲视频在线免费| 热re99久久精品国产66热| 亚洲视频在线免费播放| 成人精品国产福利| 亚洲欧美久久234| 久草在线新免费首页资源站| 色综合色狠狠综合色| 奇米777在线视频| 在线视频亚洲专区| 欧美成人性生活| 免费黄色一级大片| 成人丝袜高跟foot| 99亚洲精品视频| 精品91久久| 日韩视频不卡中文| 欧美一区二区三区观看| 国产亚洲精品久久久久婷婷瑜伽| 成人黄色网免费| 久青草国产在线| 亚洲图片欧美视频| 国产成人美女视频| 国产传媒欧美日韩成人精品大片| 欧美激情一区二区久久久| 在线观看视频中文字幕| 2020日本不卡一区二区视频| 日韩成人三级视频| 中文字幕综合| 永久免费看mv网站入口亚洲| 日韩少妇高潮抽搐| 国产精品69毛片高清亚洲| 偷拍视频一区二区| 免费电影日韩网站| 日韩精品免费在线播放| 久久久久久久久久久97| 久久99久久久久| 亚洲 国产 欧美一区| 这里有精品可以观看| 亚洲精品99久久久久中文字幕| 国产真实乱在线更新| 老司机午夜精品| 日韩欧美一区二区三区久久婷婷| 美女搞黄视频在线观看| 亚洲精品国产精品国自产在线| 免费一级片在线观看| 国产美女一区二区三区| 成人在线观看www| 四虎成人精品一区二区免费网站| 一区二区三区亚洲| 久久国产香蕉视频| 国产日产欧美一区| 成人一级片网站| 亚洲+变态+欧美+另类+精品| 久久久久久久亚洲精品| 人妻少妇精品无码专区久久| 亚洲一区精品在线| 中文字幕一区二区人妻电影丶| 亚洲电影成人| 久99久在线| 性欧美又大又长又硬| 亚洲精品视频中文字幕| 国产一级片毛片| 久久午夜羞羞影院免费观看| 丰满少妇被猛烈进入高清播放| 日本亚洲不卡| 国产成人中文字幕| 阿v免费在线观看| 欧美丰满美乳xxx高潮www| 国产一区二区精彩视频| 国产99久久久久久免费看农村| 女人色极品影院| 欧美人妖视频| 日本成人黄色片| yw193.com尤物在线| 在线不卡免费欧美| 久久精品性爱视频| 久久久精品国产99久久精品芒果| 妺妺窝人体色www在线观看| 日韩在线看片| 国产精品加勒比| 麻豆理论在线观看| 伊人久久久久久久久久久久久| 丰满人妻一区二区三区四区| 亚洲靠逼com| 老熟妇精品一区二区三区| 亚洲综合好骚| 中文字幕在线中文字幕日亚韩一区| 日本超碰一区二区| 欧美一级大片视频| 欧美jizzhd欧美| 亚洲第一男人天堂| 日本一本在线观看| 一区二区三区四区精品在线视频| 国产麻豆xxxvideo实拍| 麻豆成人免费电影| 2018中文字幕第一页| 国产一区二区区别| 国产精品福利在线观看网址| 91麻豆免费在线视频| 亚洲人av在线影院| 午夜精品久久久久久久99老熟妇| 一本色道亚洲精品aⅴ| 欧美色图亚洲视频| 国产欧美精品一区二区色综合 | 欧美日韩中文字幕在线播放| 亚洲欧洲免费| 亚洲最大福利视频网| 电影一区电影二区| 68精品久久久久久欧美| 天堂地址在线www| 精品香蕉一区二区三区| 国产熟女精品视频| 日本丶国产丶欧美色综合| 免费人成年激情视频在线观看| 国产欧美中文在线| 91视频啊啊啊| 国产一二三精品| 亚洲这里只有精品| 亚欧美中日韩视频| 国产一二三区在线播放| 欧美韩国日本在线观看| 免费观看成人高| 超碰一区二区三区| 91亚洲精品在线| 成人国产激情| 国产精品久久久久久久电影| 欧美gv在线观看| 欧美人成在线视频| 欧美18hd| 在线视频中文亚洲| 国内三级在线观看| 日韩av在线高清| 日本国产在线观看| 日韩欧美在线不卡| 国产伦精品一区二区三区视频痴汉 | 丁香婷婷综合激情| 羞羞答答成人影院www| 日韩av高清在线播放| 色狼人综合干| 久久久com| 四虎884aa成人精品最新| 国产视频精品网| 97久久综合精品久久久综合| 成人精品福利视频| 一区二区三区日本视频| 国产一区二区色| 国产精品99久久久久久董美香| 日韩美女免费观看| 日韩三区在线| 国产精品激情av在线播放| 成人免费网站www网站高清| 国产成人avxxxxx在线看| 澳门成人av网| 国产aⅴ夜夜欢一区二区三区| 亚洲日本天堂| 国产不卡视频在线| 亚洲四虎影院| 国产剧情日韩欧美| 伊人久久精品| 亚洲最大的免费| 一区二区免费| 久久国产精品 国产精品| 九九视频免费观看视频精品| 欧美韩国日本精品一区二区三区| 伊甸园亚洲一区| 日本一区二区三不卡| 成人黄色小视频| 色乱码一区二区三区熟女| 在线观看免费一区二区| 免费一级淫片aaa片毛片a级| 国产精品亚洲综合久久| 啊啊啊国产视频| 精品一区二区免费看| 日本高清免费在线视频| 国产福利一区二区三区| 免费黄色三级网站| 日本一区二区视频在线| 性欧美videos| 欧美日韩在线影院| 在线免费一级片| 日韩免费高清视频| 青青草视频在线免费观看| 国产一区二区久久精品| 免费在线观看av| 久久久久五月天| 亚洲伦理影院| 99久久精品免费看国产一区二区三区| 青青草这里只有精品| 亚欧洲精品在线视频免费观看| 欧美涩涩网站| 成年人小视频网站| 国产成人在线影院| 久操视频免费看| 亚洲美腿欧美偷拍| 亚洲欧美精品一区二区三区| 在线播放中文一区| 视频三区在线观看| 美女视频黄免费的亚洲男人天堂| 国产传媒av在线| 成人免费视频97| 亚洲宅男一区| 伊人网在线免费| 视频一区二区中文字幕| 巨乳女教师的诱惑| 国产欧美一区在线| 日本少妇激情视频| 91麻豆精品国产91| 国产在线一在线二| 久久久久久久久爱| 另类一区二区| 久久综合伊人77777麻豆| 最新欧美人z0oozo0| 性生交免费视频| 99久久久久久| 亚洲天堂黄色片| 欧美日精品一区视频| 婷婷综合激情网| 欧美另类暴力丝袜| 婷婷激情成人| 日韩福利在线| 亚洲一区免费| 国产日韩视频一区| 亚洲免费在线播放| 亚洲天堂网在线观看视频| 亚洲精品一区中文| 日韩理论视频| 激情小说网站亚洲综合网| 一区二区三区四区电影| 91亚洲免费视频| 久久久夜色精品亚洲| 91视频免费网址| 亚洲国产成人精品女人久久久| 亚洲精品白浆| 亚洲永久在线观看| 久久精品青草| 亚洲精品免费一区亚洲精品免费精品一区| 久久久久国产精品麻豆ai换脸 | 成人福利片网站| 国产欧美在线视频| 欧美色就是色| 在线观看的毛片| 中文字幕巨乱亚洲| 最新在线中文字幕| 在线精品播放av| 国产精品无码久久久久| 丝袜美腿玉足3d专区一区| 日韩高清欧美激情| 黄免费在线观看| 欧美日韩中文字幕精品| youjizz在线播放| 国产这里只有精品| 国产大片一区| 一级片黄色免费| 亚洲综合色成人| 色网站免费观看| 欧美综合在线第二页| 亚洲尤物av| 亚洲77777| 国产精品成人在线观看| 国产精品久久久久久久久毛片| 久久韩国免费视频| 一区二区免费| 无码人妻精品一区二区三区在线| av中文一区二区三区| 亚洲欧美自拍视频| 在线中文字幕日韩| 天天综合在线观看| 男人添女人荫蒂免费视频| 91天堂素人约啪| 中文在线免费观看| 久久99精品视频一区97| 欧美日韩精品一区二区三区在线观看| 干日本少妇首页| 国产精品久久久久久久久久免费看| 国产精品无码久久av| 欧美极品少妇与黑人| 香蕉人人精品| 污版视频在线观看| 一区二区在线观看视频在线观看| 免费看黄色一级视频| 国产91网红主播在线观看| 99久久亚洲精品| 日本国产在线视频| 欧美色区777第一页| av网址在线免费观看| 国产一区二区视频在线免费观看| 久久久噜噜噜久久狠狠50岁| chinese全程对白| 亚洲第一av网| 青草综合视频| 亚洲不卡中文字幕无码| 中文字幕一区二区5566日韩| 免费看国产片在线观看| 国产欧亚日韩视频| 999在线观看精品免费不卡网站| 国产一二三四五区| 日韩天堂在线观看| 精品成人免费一区二区在线播放| 91精品一区二区三区四区| 26uuu久久天堂性欧美| 国产女主播福利| 国产精品99免视看9| 激情六月综合| 国产麻豆a毛片| 精品无码久久久久久国产| 日韩欧美中文字幕在线视频|