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

【前端】重構,有品位的代碼 07 ── 簡化條件邏輯

開發 架構
在程序編寫中,復雜的條件邏輯會導致算法復雜度上升,因為會根據不同的條件分支做出不同的事情,這樣便得到復雜冗長的函數。正如你所知道的,函數越大越長,代碼的可讀性就越低,在理解和閱讀就愈發困難。

[[410522]]

本文轉載自微信公眾號「前端萬有引力」,作者一川。轉載本文請聯系前端萬有引力公眾號。

簡化條件邏輯

常見的簡化條件邏輯方法有:

  • 分解條件表達式
  • 合并條件表達式
  • 以衛語句取代嵌套條件表達式
  • 以多態取代條件表達式
  • 引入特例
  • 引入斷言

1. 分解條件表達式

在程序編寫中,復雜的條件邏輯會導致算法復雜度上升,因為會根據不同的條件分支做出不同的事情,這樣便得到復雜冗長的函數。正如你所知道的,函數越大越長,代碼的可讀性就越低,在理解和閱讀就愈發困難。

在前面幾篇文章中,對于大塊頭函數可以根據功能意圖分解成幾個小型的函數,因此可以根據邏輯分支的意圖將條件邏輯函數分解。

原始代碼:

  1. if(!have.before(plan.summerStart) && !plan.after(plan.summerEnd)){ 
  2.   charge = quantity * plan.summerRate; 
  3. }else
  4.   charge = quantity * plan.regularRate + plan.regularServiceCharge; 

重構代碼:

  1. charge = summer() ? summerCharge() : regularCharge(); 
  2.  
  3. function summer(){ 
  4.   return !have.before(plan.summerStart()) && !have.aftet(plan.summerEnd()); 
  5.  
  6. function summerCharge(){ 
  7.   return quantity * plan.summerRate; 
  8.  
  9. function regularCharge(){ 
  10.   return quantity * plan.regularRate + plan.regularServiceCharge; 

2. 合并條件表達式

在進行代碼的條件檢查,檢查條件雖有不同,但是處理事件的行為卻是一致的。與其使用條件邏輯處理事件,不如使用邏輯『或』和『與』將其合并成條件表達式,分解冗長的函數代碼。使用條件表達式可以讓代碼閱讀更清晰,提煉函數可以將條件函數的代碼邏輯提煉成獨立函數,可理清代碼意義。

具體的,進行合并條件表達式之時,必先確定其是否具有副作用,將查詢函數和修改函數分離處理。使用適當的邏輯運算符,將兩個邏輯條件表達式合并成一個。

原始代碼:

  1. if(employee.seniority < 2) return 0; 
  2. if(employee.months > 12) return 0; 
  3. if(employee.timereturn 0; 

重構代碼:

  1. function func(){ 
  2.   return (employee.seniority < 2) || (employee.months > 12) || employee.time
  3.  
  4. if(func()) return 0; 

3. 以衛語句取代嵌套條件表達式

在條件表達式中通常有兩個風格:兩個條件分支都屬于正常行為,可以使用if...else...;只有一個條件分支時正常行為,另一個分支則是異常行為,即出現某個罕見條件應該單獨檢查(此為『衛語句』),條件為真時立刻從函數中返回。

所謂『衛語句』取代嵌套條件表達式,就是給其中的某分支給予特別的重視。其實就是對條件語句不是一視同仁,而是倚重其中最重要的分支語句,讓讀者閱讀代碼時能夠一眼便能看透邏輯。

原始代碼:

  1. function payMount(){ 
  2.   let result; 
  3.   if(isDead){ 
  4.     result = amountFunc(); 
  5.   }else
  6.     if(isSeparated){ 
  7.       result = separatedAmout(); 
  8.     }else
  9.       if(isRetired){ 
  10.         result = retiredAmount() 
  11.       }else
  12.         result = normalAmount(); 
  13.       } 
  14.     } 
  15.   } 
  16.   return result; 

重構代碼:

  1. function payMount(){ 
  2.   if(isDead) result = amountFunc(); 
  3.   if(isSeparated) result = separatedAmout(); 
  4.   if(isRetired) result = retiredAmount(); 
  5.   return normalAmount(); 

4. 以多態取代條件表達式

在編程中復雜的條件邏輯是相當難理解的代碼,與其尋求給條件邏輯添加結構,不如拆分分支條件到不同的場景,即高階用例。在拆解復雜的條件邏輯時,有時發現條件邏輯本身結構足以表達,但使用類和多態能把邏輯拆分表達更清晰。

如果現有的類尚不具備多態行為,可創建工廠函數返回恰當的對象實例,在調用方法時即可獲得對象實例。可以將帶有條件的函數移到超類中,如果條件邏輯還未提煉到獨立的函數。任選子類在其中創建函數,將其進行覆寫超類中容納條件表達式的函數,將子類相關條件表達式分支復制到新函數進行調整。

原始代碼:

  1. switch(user.type){ 
  2.   case "UserName"
  3.     return "yichuan"
  4.   case "UserAge"
  5.     return this.age > 18 ? "成年" : "未成年"
  6.   case "UserUniversity"
  7.     return this.score > 600 ? "985高校" : "非985高校"
  8.   default
  9.     return "unknown"

重構代碼:

  1. class UserName{ 
  2.   get detail(){ 
  3.     return "yichuan"
  4.   } 
  5.  
  6. class UserAge{ 
  7.   get detail(){ 
  8.     return this.age > 18 ? "成年" : "未成年"
  9.   } 
  10.  
  11. class UserUniversity{ 
  12.   get detail(){ 
  13.     return this.score > 600 ? "985高校" : "非985高校"
  14.   } 

5. 引入特例

常見的重復代碼是:一個數據結構的使用者都在檢查某個特殊的值,且當這個特殊值出現時多做的處理也同樣。如果發現代碼中在多處以相同方式應對同個特殊值,就可以將處理邏輯整合在一塊。

處理重復代碼最好的方法時使用『特例』模式,創建一個特例元素,用來處理特例的共用行為,可用一個函數調用取代部分特例檢查邏輯。

通常的,特例有幾種表現形式,我們可以對常見方式進行處理。如:

  • 只從對象中讀取數據,可以提供一個預先填充值的字面量對象
  • 除獲取簡單數值外還需更多行為,則可以創建保函所有共有行為所對應的函數
  • 特例對象可以封裝成類進行返回,亦可通過變換插入數據結構
  1. //原始代碼 
  2. if(flag === "unkown"name = "yichuan"
  3.  
  4. //重構代碼 
  5. class User
  6.   get name(){ 
  7.     return "yichuan"
  8.   } 

6. 引入斷言

在進行程序開發時,只有當某個條件為真時代碼才能正常運行,常規做法是使用注釋進行解釋。而使用斷言可以明確標明假設,因為其時一個條件表達式,應當總是恒等于真,斷言的失敗不應該被系統任何地方捕獲。

斷言在交流上具有很高的價值,可以解決了當下正在追蹤的錯誤,但是自測代碼降低了斷言在調試過程中的價值,因為逐步逼近的單元測試通常有助于調試。

原始代碼:

  1. func(num){ 
  2.   return (discountRate) ? num - (discountRate * num) : num; 

重構代碼:

  1. set discountRate(num){ 
  2.   assert(null === num || num >= 0); 
  3.   discountRate= num;   

小結

在本文中,主要介紹了如何簡化條件邏輯,可以對條件邏輯進行操作,而代碼也變得更加清晰易懂。

參考文章

《重構──改善既有代碼的設計(第2版)》

 

責任編輯:武曉燕 來源: 前端萬有引力
相關推薦

2022-04-21 07:20:39

Javascript重構邏輯

2021-07-01 08:28:24

前端搬移特性開發技術

2021-08-03 08:13:48

重構API代碼

2021-07-03 12:28:30

前端數據代碼

2025-03-11 11:40:00

三元運算符代碼JavaScript

2010-09-03 14:56:12

SQLSELECT語句

2025-10-27 01:40:00

2025-05-06 09:20:00

JavaScript開發條件邏輯

2013-09-16 10:57:59

蘋果世界

2021-06-05 05:11:52

代碼狀態機邏輯

2020-06-10 08:37:21

JavaScript重構技巧

2020-12-08 06:20:49

前端重構Vue

2021-06-23 10:32:24

前端ES6代碼

2013-06-09 10:37:14

架構框架

2013-04-12 10:17:56

重構業務邏輯

2024-09-05 10:17:34

2024-06-24 08:10:34

Java8表達式IDE

2022-08-08 13:24:28

整潔架構架構前端

2012-07-27 10:30:12

重構

2025-03-03 01:25:00

classnameAPI前端
點贊
收藏

51CTO技術棧公眾號

久久综合狠狠综合| 国产探花在线精品一区二区| 亚洲综合视频在线| 久久久久欧美| 又骚又黄的视频| 自拍偷拍欧美专区| 亚洲欧美日本精品| 国产精品中文久久久久久| 三妻四妾的电影电视剧在线观看| 亚洲国产成人午夜在线一区 | 日韩精品久久一区二区| 深夜福利视频在线观看| 久久精品国产色蜜蜜麻豆| 久久久久九九九九| 国精产品视频一二二区| 精品自拍偷拍| 69久久99精品久久久久婷婷 | 福利所第一导航| 欧美**字幕| 精品国产电影一区二区| 日韩精品视频一二三| 高清在线视频不卡| 亚洲精品欧美二区三区中文字幕| 国产精品亚洲不卡a| 91黄色在线视频| 久久国产99| 性欧美在线看片a免费观看| 成人三级视频在线观看| 久草在线资源站手机版| 99re久久精品国产| 一区二区三区播放| 国产亚洲网站| 欧美激情三级免费| 91综合免费在线| 欧美激情网友自拍| 日韩av加勒比| 亚洲日本网址| 国产v日产∨综合v精品视频| 国产亚洲午夜| 日韩av在线免费观看一区| 手机免费看av网站| japanese23hdxxxx日韩| 成人影院在线看| 无码少妇一区二区| 欧美日韩经典丝袜| 国产精品久久久久久久久免费丝袜| 国产欧美亚洲日本| 亚洲成人av综合| 国产乱色国产精品免费视频| 欧美嫩在线观看| 成人aaaa| 粉嫩欧美一区二区三区高清影视| 国产精品久久久久久久久免费看| 国产成人精品a视频一区| 欧美成熟视频| 欧美人与物videos| 久久久久无码国产精品| 欧美精品性生活| 欧美做受高潮电影o| 在线观看一区二区三区视频| 亚洲欧洲二区| 欧美日韩一区三区| 中文字幕12页| 成人免费91| 免费观看成人av| 国产三区视频在线观看| 国产福利在线免费观看| 精品一区在线| 色婷婷综合久久久中字幕精品久久| 成人性生交大片免费看中文视频| 久久久久久电影| 欧美激情亚洲国产| 国产乡下妇女做爰| 夜夜嗨一区二区三区| 茄子视频成人在线| 中文字幕无码乱码人妻日韩精品| 蜜桃一区二区三区在线| 91热精品视频| 免费av网站观看| www精品美女久久久tv| 日韩av一级大片| 免费日本一区二区三区视频| 亚洲激情综合网| 欧美一级视频在线播放| 三上悠亚激情av一区二区三区| 欧美亚洲国产怡红院影院| 亚洲精品免费一区亚洲精品免费精品一区| av在线播放一区二区| 精品国精品国产尤物美女| 欧美bbbbb性bbbbb视频| 成人在线电影在线观看视频| 欧美精品一本久久男人的天堂| 日本在线视频免费观看| 青青青伊人色综合久久| 亚洲综合视频1区| 免费黄色片在线观看| 亚洲视频图片小说| 国产精品国产亚洲精品看不卡| 日韩在线免费| 亚洲成人av中文字幕| 国产又粗又硬视频| 最新成人av网站| 国产精品96久久久久久又黄又硬| 国产精选久久久| 久久影院电视剧免费观看| 国产精品12p| 涩涩涩在线视频| 欧美一区二区三区在线看| 国产高清自拍视频| 一个色综合网| 国产精品久久久久久婷婷天堂| 亚洲精品成人电影| 国产精品理伦片| 亚洲中文字幕无码专区| 韩国三级大全久久网站| 国产亚洲a∨片在线观看| 久久久久久久久久久久久久免费看 | 久久久久久九九九九| 久久久久久久久免费视频| 一本久久精品一区二区| 日韩综合第一页| 伊人情人综合网| 国产精品网红福利| 欧美拍拍视频| 精品欧美aⅴ在线网站| 亚洲欧美日本一区二区三区| 久久99视频| 91po在线观看91精品国产性色| 国产肥老妇视频| 一区二区中文视频| 亚洲欧美日韩一级| 欧美理论视频| 日本sm极度另类视频| 日韩一级片免费看| 亚洲一区精品在线| 在线观看网站黄| 999久久久91| 国产欧美一区二区三区在线| 国产区av在线| 欧美主播一区二区三区| 欧美人妻一区二区三区| 丝袜a∨在线一区二区三区不卡| 精品国产电影| 少妇视频一区| 亚洲精品资源在线| 精品无码av在线| av黄色一级片| 99久久久无码国产精品免费| 久久久久久麻豆| 伊人成色综合网| 欧美三级午夜理伦三级在线观看 | 亚洲精品乱码久久久久久久久久久久| 国产亚洲亚洲| 欧美在线你懂得| 国产一区在线观看麻豆| 蜜臀久久99精品久久久无需会员| 中国女人真人一级毛片| 国产欧美日韩不卡免费| 日韩av手机版| 日韩情爱电影在线观看| 国产欧美日韩最新| gogo在线高清视频| 奇米色777欧美一区二区| 国产欧美日韩高清| 黄色网页在线免费看| 4438成人网| 久草成人在线视频| av色综合久久天堂av综合| 欧美性大战久久久久xxx | 日韩亚洲欧美在线观看| 久久久久无码精品国产| 99国产精品久久久久久久久久久| 欧美极品欧美精品欧美图片| 教室别恋欧美无删减版| 国产日韩专区在线| 欧美日韩色网| 亚洲人av在线影院| 国产精品一区二区av白丝下载| 亚洲一区二区三区四区的| www.自拍偷拍| 精品一区二区三区免费播放| 日韩 欧美 视频| 精品亚洲成人| 91av免费看| 中文字幕乱码在线播放| www.日本久久久久com.| 狠狠人妻久久久久久综合麻豆| 欧美日韩色婷婷| 国产传媒免费在线观看| 99免费精品在线| 欧美一级视频在线| 免费日韩一区二区| 强开小嫩苞一区二区三区网站| 日韩精品亚洲aⅴ在线影院| 成人a免费视频| 台湾佬中文娱乐网欧美电影| 久久久精品在线| 久香视频在线观看| 日韩三级在线免费观看| 日韩黄色一级视频| 亚洲午夜久久久久久久久电影网| 日韩欧美黄色网址| www.激情成人| 日本成人xxx| 日韩高清在线不卡| 国产a级片网站| 99精品网站| 日本不卡二区| 牛牛影视久久网| 51精品国产人成在线观看| 忘忧草在线www成人影院| 欧美激情在线狂野欧美精品| 麻豆视频在线免费观看| 亚洲欧美一区二区激情| 理论片中文字幕| 欧美一区二区三区四区五区| 免费黄色av片| 欧美日韩在线免费| 久久精品免费av| 亚洲黄色性网站| 性生交大片免费全黄| 国产日韩欧美激情| 国产精品揄拍100视频| 波波电影院一区二区三区| 北条麻妃亚洲一区| 久久成人久久爱| 日韩大片一区二区| 天堂影院一区二区| 久久久久久久久久久免费视频| 亚洲一级高清| 日本阿v视频在线观看| 久久精品青草| 欧美性视频在线播放| 日韩精品四区| 亚洲啪啪av| 国产免费av一区二区三区| 蜜桃传媒视频第一区入口在线看| 精品国产一区二区三区不卡蜜臂| 亚洲自拍小视频| 国产情侣一区在线| 亚洲自拍偷拍福利| 日韩第一区第二区| 99久热re在线精品996热视频 | 国产女主播一区二区三区| 亚洲一区二区免费在线观看| 91精品久久香蕉国产线看观看| 国产精品一区二区美女视频免费看 | 欧美日韩一级在线| 亚洲情侣在线| 国产爆乳无码一区二区麻豆| 综合五月婷婷| xxxx18hd亚洲hd捆绑| 日韩一级精品| 成人三级视频在线播放 | 欧美人与性动交α欧美精品| 国产成人精品亚洲777人妖| 少妇极品熟妇人妻无码| 成人av在线电影| 久久精品国产亚洲av麻豆| 国产亚洲成av人在线观看导航 | 国产美女久久精品| 亚洲一区导航| 国产精品夜夜夜一区二区三区尤| 欧美一性一交| 视频一区视频二区视频三区视频四区国产| 成人精品亚洲| 青草全福视在线| 影音先锋在线一区| av无码精品一区二区三区| 美女视频免费一区| 久久久久亚洲av无码网站| 91在线观看视频| 最新日韩免费视频| 亚洲一区二区黄色| 国产性生活视频| 5566中文字幕一区二区电影| 四虎精品一区二区三区| 国产一区二区日韩精品欧美精品| 精品美女在线观看视频在线观看| 久久理论片午夜琪琪电影网| free欧美| 91沈先生播放一区二区| 少妇精品久久久一区二区| 国产精品h视频| 国产精品亚洲综合色区韩国| 午夜激情av在线| 成人av在线网站| 免费成人美女女在线观看| 亚洲va国产va欧美va观看| 中文字幕+乱码+中文| 亚洲精品一区二区三区99| 国产女人在线观看| 久久久久国产精品www| 国产成人免费| 精品视频高清无人区区二区三区| 大色综合视频网站在线播放| 欧洲美女和动交zoz0z| 伊人天天综合| 一级 黄 色 片一| 国产成a人无v码亚洲福利| 九九精品久久久| 久久色在线观看| 久久久久亚洲av无码专区 | 97视频免费在线| 欧美人动与zoxxxx乱| 少妇一区二区三区四区| 中文字幕日韩有码| 欧美大胆a人体大胆做受| 国产男女猛烈无遮挡91| 夜夜躁狠狠躁日日躁2021日韩| 国产一级大片免费看| 蜜桃av噜噜一区| 337p日本欧洲亚洲大胆张筱雨| 久久久久国色av免费看影院| 免费在线观看国产精品| 色综合天天综合色综合av| 黄色一级a毛片| 国产一区二区三区在线播放免费观看 | www.豆豆成人网.com| 久久手机视频| 伊人精品视频| 麻豆短视频在线观看| 亚洲天堂网中文字| 一区二区国产欧美| 欲色天天网综合久久| 欧美日韩免费看片| 美女亚洲精品| 99亚洲伊人久久精品影院红桃| 亚洲欧洲日韩综合| 一区二区在线观看免费视频播放| 一区二区视频播放| 中文亚洲视频在线| 91在线亚洲| 四虎影视永久免费在线观看一区二区三区| 亚洲尤物在线| 日本高清www| 一本在线高清不卡dvd| 色在线免费视频| 青青在线视频一区二区三区| 亚洲免费观看高清完整版在线观| 又粗又黑又大的吊av| 99re在线视频这里只有精品| 日韩欧美视频在线免费观看| 亚洲精品成人av| 欧美另类老肥妇| 欧美日韩亚洲在线| 日韩专区中文字幕一区二区| 欧美大波大乳巨大乳| 91福利在线导航| 98在线视频| 国产精品小说在线| 91麻豆国产自产在线观看亚洲| 男人添女人下面免费视频| 国产精品免费久久久久| 97国产成人无码精品久久久| 另类视频在线观看| 9999久久久久| 国产乱子伦农村叉叉叉| 久久精品一区二区三区不卡牛牛| 久久久精品毛片| www.国产一区| 91夜夜蜜桃臀一区二区三区| 国产精品网站免费| 国产午夜精品久久久久久久 | 精品午夜一区二区三区在线观看 | 欧美日本精品| 免费黄色三级网站| 日本韩国欧美在线| 免费在线观看av| 国产精品日韩一区二区三区| 性色一区二区| 男人的午夜天堂| 精品av综合导航| 婷婷午夜社区一区| 中文字幕免费在线不卡| 成人精品视频.| 自拍偷拍福利视频| 欧美成人午夜影院| 亚洲精品国产动漫| av噜噜在线观看| 午夜视频在线观看一区二区 | 欧美裸体男粗大视频在线观看| 精品国产一区二区三区不卡蜜臂| 国产裸体免费无遮挡| 伊人夜夜躁av伊人久久| 日本护士...精品国| 成人免费淫片aa视频免费| 99精品热视频只有精品10| 免费看的黄色录像| 亚洲福利在线观看| 欧美一级做一级爱a做片性| 可以在线看的av网站| 国产精品激情偷乱一区二区∴| 熟妇人妻av无码一区二区三区| 国产精品一久久香蕉国产线看观看| 狠狠色丁香久久综合频道| 精品国产aaa| 亚洲精品久久久久中文字幕二区| 视频91a欧美| 日韩精品一区二区三区色欲av|