'面試官:優化代碼中大量的if/else,你有什麼方案?'

設計 Java 程序員 編程語言 Google 前端學習愛好者 2019-08-24
"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

面試官:優化代碼中大量的if/else,你有什麼方案?


通過枚舉優化之後的代碼如下

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

面試官:優化代碼中大量的if/else,你有什麼方案?


通過枚舉優化之後的代碼如下

面試官:優化代碼中大量的if/else,你有什麼方案?


3. 學會使用 Optional

Optional主要用於非空判斷,由於是jdk8新特性,所以使用的不是特別多,但是用起來真的爽。

使用之前:

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

面試官:優化代碼中大量的if/else,你有什麼方案?


通過枚舉優化之後的代碼如下

面試官:優化代碼中大量的if/else,你有什麼方案?


3. 學會使用 Optional

Optional主要用於非空判斷,由於是jdk8新特性,所以使用的不是特別多,但是用起來真的爽。

使用之前:

面試官:優化代碼中大量的if/else,你有什麼方案?


如果登錄用戶為空,執行action1,否則執行action 2,使用Optional優化之後,讓非空校驗更加優雅,間接的減少if操作

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

面試官:優化代碼中大量的if/else,你有什麼方案?


通過枚舉優化之後的代碼如下

面試官:優化代碼中大量的if/else,你有什麼方案?


3. 學會使用 Optional

Optional主要用於非空判斷,由於是jdk8新特性,所以使用的不是特別多,但是用起來真的爽。

使用之前:

面試官:優化代碼中大量的if/else,你有什麼方案?


如果登錄用戶為空,執行action1,否則執行action 2,使用Optional優化之後,讓非空校驗更加優雅,間接的減少if操作

面試官:優化代碼中大量的if/else,你有什麼方案?


4. 數組小技巧

來自google解釋,這是一種編程模式,叫做表驅動法,本質是從表裡查詢信息來代替邏輯語句,比如有這麼一個場景,通過月份來獲取當月的天數,僅作為案例演示,數據並不嚴謹。

一般的實現:

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

面試官:優化代碼中大量的if/else,你有什麼方案?


通過枚舉優化之後的代碼如下

面試官:優化代碼中大量的if/else,你有什麼方案?


3. 學會使用 Optional

Optional主要用於非空判斷,由於是jdk8新特性,所以使用的不是特別多,但是用起來真的爽。

使用之前:

面試官:優化代碼中大量的if/else,你有什麼方案?


如果登錄用戶為空,執行action1,否則執行action 2,使用Optional優化之後,讓非空校驗更加優雅,間接的減少if操作

面試官:優化代碼中大量的if/else,你有什麼方案?


4. 數組小技巧

來自google解釋,這是一種編程模式,叫做表驅動法,本質是從表裡查詢信息來代替邏輯語句,比如有這麼一個場景,通過月份來獲取當月的天數,僅作為案例演示,數據並不嚴謹。

一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?


優化後的代碼

"

一個快速迭代的項目,時間久了之後,代碼中可能會充斥著大量的if/else,嵌套6、7層,一個函數幾百行,簡!直!看!死!人!

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片


這個無限循環嵌套,只是總循環的一部分。。。我已經繞暈在黃桷灣立交

仔細數了數,一共有 11 層的嵌套!!!接手這種項目的同學,內心應該是絕望的。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

出現這種情況的原因很多

  • 設計不夠完善
  • 需求考慮不完全
  • 開發人員變動

但最為致命的是“懶”

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

你懶,我也懶,前期迭代懶得優化,來一個需求,加一個if,久而久之,就串成了一座金字塔。

面試官:優化代碼中大量的if/else,你有什麼方案?

打開UC瀏覽器 查看更多精彩圖片

當代碼已經複雜到難以維護的程度之後,只能狠下心重構優化。那,有什麼方案可以優雅的優化掉這些多餘的if/else?

1. 提前return

這是判斷條件取反的做法,代碼在邏輯表達上會更清晰,看下面代碼:

打開UC瀏覽器 查看更多精彩圖片

其實,每次看到上面這種代碼,我都心裡抓癢,完全可以先判斷 !condition,幹掉else。

面試官:優化代碼中大量的if/else,你有什麼方案?

2. 策略模式

有這麼一種場景,根據不同的參數走不同的邏輯,其實這種場景很常見。 最一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?

看上面代碼,有4種策略,有兩種優化方案。

2.1 多態

面試官:優化代碼中大量的if/else,你有什麼方案?


具體策略對象存放在一個Map中,優化後的實現

面試官:優化代碼中大量的if/else,你有什麼方案?


上面這種優化方案有一個弊端,為了能夠快速拿到對應的策略實現,需要map對象來保存策略,當添加一個新策略的時候,還需要手動添加到map中,容易被忽略。

2.2 枚舉

發現很多同學不知道在枚舉中可以定義方法,這裡定義一個表示狀態的枚舉,另外可以實現一個run方法。

面試官:優化代碼中大量的if/else,你有什麼方案?


重新定義策略枚舉

面試官:優化代碼中大量的if/else,你有什麼方案?


通過枚舉優化之後的代碼如下

面試官:優化代碼中大量的if/else,你有什麼方案?


3. 學會使用 Optional

Optional主要用於非空判斷,由於是jdk8新特性,所以使用的不是特別多,但是用起來真的爽。

使用之前:

面試官:優化代碼中大量的if/else,你有什麼方案?


如果登錄用戶為空,執行action1,否則執行action 2,使用Optional優化之後,讓非空校驗更加優雅,間接的減少if操作

面試官:優化代碼中大量的if/else,你有什麼方案?


4. 數組小技巧

來自google解釋,這是一種編程模式,叫做表驅動法,本質是從表裡查詢信息來代替邏輯語句,比如有這麼一個場景,通過月份來獲取當月的天數,僅作為案例演示,數據並不嚴謹。

一般的實現:

面試官:優化代碼中大量的if/else,你有什麼方案?


優化後的代碼

面試官:優化代碼中大量的if/else,你有什麼方案?


結束

if else作為每種編程語言都不可或缺的條件語句,在編程時會大量的用到。一般建議嵌套不要超過三層,如果一段代碼存在過多的if else嵌套,代碼的可讀性就會急速下降,後期維護難度也大大提高。

歡迎3-5年的java開發者,這裡是程序員祕密聚集地, 同道中人居多,更有價值1萬元的免費資料限時領取(限前20位)點擊瞭解更多免費領取

如果你還有其它小技巧,歡迎留言!!


"

相關推薦

推薦中...