一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

2019-12-29 17:20PHP教程網 PHP教程

條件邏輯有可能十分復雜,因此本章提供一些重構的手法,專門用來簡化它們

思維導圖 
點擊下圖,查看大圖。 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 介紹
 
 條件邏輯有可能十分復雜,因此本章提供一些重構的手法,專門用來簡化它們。
 
全文簡述(你可直接跳過下面的內容)
  核心重構:Decompose Conditional——分離”轉轍邏輯“(switching logic)和”操作細節“(details)分離。
  多處測試有相同結果:Consolidate Conditional Expresssion
  條件代碼中去掉重復成分:Consolidate Duplicate
  標識特殊情況:Replace Nested Conditional with Guard Clauses
  去除討厭的控制標記:Remove Control Flag
 
 
 專業術語
 
decompose:分解,分離
consolidate:合并
eligible:合適的,合格的
fragment:碎片,片段
nest:嵌套
guard:保衛
clause:從句
polymorphism:多態
assertion:斷言
unchecked exception:不可控異常
 
 Decompose Conditional
 
狀況:你有一個復雜的條件(if-else if-else)語句,那么從if、else if、else三個段落中分別提煉出函數。

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 

 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 

 Consolidate Conditional Expression
 
狀況:你有一些條件測試,都得到相同的結果,那么將這些測試合并為一個條件式,并將這個條件提煉稱為一個獨立的函數。
動機: 1、合并后的條件代碼會告訴你“實際上只有一次條件檢查,只不過有數個并列條件需要檢查而已“,——使檢查的用意更清晰。
     2、為Extract Method做好準備。——將檢查條件提煉成一個獨立函數,對于理清代碼意義非常有用。它把描述“做什么”的語句換成了“為什么這樣做”。

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 

條件語句的“合并理由”也同時指出了“不要合并”的理由:如果你認為你的這些檢查的確彼此獨立,的確不應該被視為同一次檢查,那么就不要使用本項重構。因為在這種情況下,你的代碼已經清楚表達出自己的意義。

 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 

 Consolidate Duplicate Conditional Fragments
 
狀況:在條件式的每個分支上有著相同的一段代碼,那么將這段重復代碼搬移到條件之外。
 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 
 Remove Control Flag
 
狀況:在一系列布爾表達式中,某個變量帶有“控制標記”的作用,那么以break語句或return語句取代控制標記。
 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式
 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 
 Replace Nested Conditional with Guard Clauses
 
狀況:函數中的條件邏輯使人很難看清正常的執行路徑,那么使用衛語句(Guard Clauses)表現所有特殊情況。

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式


條件式的兩種形式:
  1、所有分支都屬于正常行為:使用[if ... else..]
  2、條件式極其罕見:應該單獨檢查該條件,并在該條件為真時,立刻從函數中返回。——這樣的單獨檢查常常被稱為”衛語句“
Replace Nested Conditional with Guard Clauses精髓:給某一分支以特別重視。

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 
 Replace Conditional with Polymorphism
 
狀況:你手上有個表達式,它根據對象型別的不同而選擇不同的行為,那么將這個條件式的每個分支放進一個subclass內的覆寫函數中,然后將原始函數聲明為抽象函數。
 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

此代碼的壞味道:

  1、它太長,當視頻有新類型的時候,它會變得更長。

  2、它明顯做了不止一件事。

  3、它違反了單一權責原則,因為它有好幾個修改它的理由。

  4、它違反了開放閉合原則,因為每當添加新類型時,必須修改它。不過最麻煩的可能是到處皆有類似結構(_get類型名Rank())的函數。

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 Introduce Assertion
 
狀況:某一段代碼需要對程序狀態(state)做出某種假設,那么以斷言(assertion)明確表現這種假設。
 

 

 

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

運行結果:

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

運行結果:

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

 
采點:

PHP 雜談《重構-改善既有代碼的設計》之四 簡化條件表達式

  1、常常會有這樣的代碼,只有當某個條件為真時,該段代碼才能正常運行。——實際上程序最后成品往往將assertion統統刪除。
  2、這樣的假設通常并沒有在代碼中明確表現出來,你必須閱讀整個算法才能看出。——有時候程序員會以注釋寫出這樣的假設,而assetion是一種更好的技術。
  3、assertion是一個條件式,應該總是為真。如果失敗,表示程序員犯了錯誤
  4、assertion可以作為交流與調試的輔助。——交流:可以幫助程序員閱讀理解代碼所做的假設。調試:幫助程序員找到bug,可以在距離最近的地方抓住bug。
  5、assertion并不改變程序的任何行為。
  6、assertion價值:幫助程序員理解代碼正確運行的必要條件。
  7、建議最好把assertion的條件式使用Extract Method,為了將若干地方的重復碼提煉到同一個函數中,也許只是為了更清楚說明條件式的用途。
 
 總結
 
       這一章我比較喜歡“Replace Nested Conditional with Guard Clauses “這個方式,我在平時的代碼中也經常這樣用,還有人給這種方式取名叫”衛從句“。
      還有一個就是我經常在php開發中用的調試是var_dump()或print_r(),我也第一次發現php中還有assert這種方式,不錯!
 
        在學習和實踐的過程中,我也學到了很多不錯的方式。但是我覺得在團隊開發中,有的時候還是”大局為重“,按照團隊的習慣方式去編碼,或者你可以跟團隊溝通,得到大家的認可之后,在使用這里面的方法,這樣大家彼此調試和閱讀對方代碼的時候比較方便。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男生操男生 | 91大神在线观看精品一区 | 欧美3p大片在线观看完整版 | 黄a一级| 日本三级欧美三级人妇英文 | 美女班主任让我爽了一夜视频 | 女人张开腿让男人桶视频免费大全 | 热久久免费视频 | 美女脱一光二净的视频 | 国产精品高清视亚洲一区二区 | 日韩精品中文字幕久久 | 艹的好爽 | 免费导航 | 国产成人精品一区二区 | 动漫美女胸被狂揉扒开吃奶动态图 | 1024国产看片在线观看 | 236zz宅宅最新伦理 | 青青青久热国产精品视频 | 九九精品视频一区二区三区 | 亚洲精品国产一区二区第一页 | 色老头oldmoneyvideos | 国产一卡2卡3卡四卡精品网站 | 国产欧美一区二区三区久久 | 99视频都是精品热在线播放 | 国内亚州视频在线观看 | 久久se精品一区二区国产 | 免费观看无遮挡www的小视频 | 国产美女下面流出白浆视频 | 男人扒开女人下身添 | 1313午夜精品理伦片 | 欧美做受 | 国产成人无精品久久久 | bt天堂午夜国产精品 | 精品国产人妻国语 | 亚洲骚图 | 99国产情在线视频 | 国产亚洲精品综合在线网址 | 国产一区二区三区高清视频 | 被黑人日 | xxoosex久久久久久 | bt7086新片速递亚洲最新合集 |