日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

平時開發中if-else用的多嗎?

其實這是個再正常不過的coding習慣,當我們代碼量小的時候用來做條件判斷是再簡單不過的了。

但對于優秀程序員來說,這并不是好代碼,

為啥?

拋開劑量談毒性都是耍流氓

在使用條件判斷語句的地方,如果代碼量小,需要判斷的場景少的話,那么沒有比 if-else 更合適的語句,比如下面這樣

if
(
object
.
getIndex
()
 
>
 
0
)
 
{
 
//do something
}
 
else
 
{
 
//do other things
}

那在什么情況下 if-else 才會變差呢?

以上面的代碼為例子,當需要判斷的情況逐漸增加的時候,上面的代碼可能會變的難以維護。

在進階高級開發的路上,應該逐步培養起這種前瞻意識,即使在代碼還在起步階段,應該要能夠看到將來代碼發展的趨勢,比如上面的代碼,當情況越來越多的時候,if-else可能會發展出許多個分支:

為什么 if-else 不是好代碼

 

這是完全可能的,以我的經驗來說就在不少項目上見過這樣的代碼。

而且代碼執行塊中的邏輯可能在幾次迭代后變的非常復雜,就像下面這樣

為什么 if-else 不是好代碼

 

看到這段代碼第一感覺就是想殺個小伙伴祭天。

如何重構掉這段代碼

對于這種代碼我們重構的目標可以有兩個深度,看自己強迫癥的嚴重程度決定

  • 繼續用 if-else,只達到剝離執行代碼塊
  • 用工廠模式去耦合

對于這兩種其實不是非此即彼的關系,而是優化深度不同。第一種相對比較簡單,可以重構成下面這樣子

為什么 if-else 不是好代碼

 

代碼清爽了很多,

現在這段代碼可以清楚的看出來都處理了哪些情況,條件判斷的代碼只關注了條件的不同,

而對于不同條件的具體處理邏輯我們剝離到了其他地方,這樣即使寫到腦袋迷糊,也不至于說漏了哪個條件沒判斷。

進一步優化

在上面的優化之后,如何再用工廠模式來繼續重構呢?

從上的代碼看的出來,不同的條件下,執行的邏輯是不同的,那么可以把這種執行邏輯抽象出來,用多態的概念來定義不同的執行方式。

為什么 if-else 不是好代碼

 

完成了這一步之后,就可以把代碼塊中不同條件下的方法抽到各個不同的具體類里面去了,

為什么 if-else 不是好代碼

 

還可以進一步優化嗎?可以的,甚至這里的條件判斷都可以不要,我們可以定義一個工廠來把 new ExecutorWithTag()這件事給包了,

為什么 if-else 不是好代碼

 

對工廠模式還有印象嗎,上面這段代碼在我之前的工廠模式一文里出現過,這里可以算是工廠模式的一個實際應用。

在經過這一輪重構之后,我們之前在一個類里面寫的那堆代碼已經抽離到多個不同的類里了,現在在原來的類里的代碼變成怎樣了呢,

為什么 if-else 不是好代碼

 

重構之后各個Executor和主類中的耦合已經降到很低了,

而且代碼整潔度提高了很多,之前那個類的一段50+行的代碼變成了2行,這就是重構的意義。

分享到:
標簽:java
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定