當前位置:編程學習大全網 - 編程語言 - 為什麽很多程序員不用switch,而是大量的if……else if?

為什麽很多程序員不用switch,而是大量的if……else if?

答案:主要因為switch不適合業務系統的實際復雜需求,業務不斷的變更叠代,壹更改需求,條件的復雜度高了,switch無力處理。

switch優點

那麽什麽時候適合switch,它的場景是:基於單壹變量的值(如枚舉),這樣的可讀性比if條件更清晰。

switch缺點

從上面的場景來看,實在太局限,我來簡單說壹下它的壹些缺點吧:

1. 現實的業務場景很復雜,條件不單壹,壹旦需求變更,維護代碼相當崩潰。

2. switch經常忘記寫break,估計很多人壹不小心就忘記寫了。如果妳看過google的代碼規範,妳會發現,Google對switch的要求非常多。

switch的封裝才更靈活

其實switch有人還在用也有壹部分是 歷史 原因,但是隨著 科技 的發展,原有的設計以及落後了。

有些編程語言,如Python都沒有switch這種語法。當然也有部分新語言Golang和Kotlin還是繼承下來,但是又把switch包裝了壹下,去掉了令人誤會的語法,這才讓switch變得靈活起來了。 如果不封裝,很難用。

IF語句的好處

通過上面描述的缺點也就是if語句更靈活的地方,根據業務進行邏輯條件編寫,可維護性高。同時只要寫的代碼質量高,可讀性也就會更高。

建議

現實的業務實際是很復雜的,我也不建議壹定要用大量的if……else if,而是應該盡早返回來減少嵌套,這樣增加了可讀性以及降低維護的成本。

我個人覺得switch其實非常多余。

1 大部分場景,都是2到3個可能分支,用個if else就可以了,除非有4 個以上分支,太多else顯得不好看,才考慮用switch.

2 switch限制多。switch必須是常量變量。if後面可以寫任意表達式。

3用法復雜,case後面要麽break,要麽return,要是不寫,居然還會繼續執行剩下的分支,對於新手來說分分鐘掉坑。

4 寫法上其實也不比if else優雅簡潔,switch xxx case xxxx ….

所以,switch徒增復雜性,真的不怎麽實用。

如果有10000種switch的可能性,有1000000個值需要被處理,怕是妳們說的這些個switch的好處就完全消失了,預期平均每次要比較5000次,1000000個值,總計要比較50億次,不知道妳們的CPU是啥主頻能扛得住這個計算量,針對這種情況的終極武器還是hash,根據不同的語言,hash的value可以是匿名函數,可以是接口的不同實現,用hash來快速確定處理算法,而不是switch

作為程序員來說,我更喜歡switch的結構,更直觀更容易找到相應的代碼塊。不過為什麽很多程序員不用Switch,而是使用大量的if...else if的結構,甚至像Python已經不支持原生Switch語法了?

這個原因很簡單,因為switch語法結構最後編譯還是通過if...else if來完成代碼的,所以從效率角度來說和if...else if壹樣的。但是switch對比條件比較單壹,絕大多數支持switch的編程語言都支持等於比較,也就是說變量只能等於case中的條件才會執行代碼塊。但是現實情況中,對比條件絕大多數比單壹等於運算要復雜得多,因此很多程序員就直接使用if...else if。但是if...else if的結構,後期維護起來會比較不清晰,畢竟沒有Case...Break那麽直觀。但是添加壹些註解應該還是能解決這個問題的。

所以,我現在能使用Switch的時候還是會使用switch,畢竟後期代碼維護起來方便點。不過更多時候還是用if...else if。

switch只能用於簡單判斷,不支持表達式。

沒有if else 使用方便。

從C/ C++來看,當分支較多且switch要比較的值是連續的話,執行速度遠遠遠遠快於if,因為switch是直接跳到目標代碼執行的,而if則需要執行很多條語句,慢的不是壹點點,壹般編譯器會根據分支數量和比較的值是否連續生成不同匯編代碼,如果編譯器判定不能提升速度的話,switch生成的匯編代碼和if是壹模壹樣的沒有任何區別。

至於很多人不用switch我覺得可能是:

1.為了方便寫代碼,思維習慣隨手就用if寫了;

2.可能根本就不懂為什麽要用switch吧。

相比之下Switch可以讓人更宏觀的去分析代碼。編寫代碼和閱讀代碼需要宏觀和微觀兩種視角,宏觀看架構和數據走向,微觀看語法和功能的片段。

有些朋友編碼喜歡走壹步看壹步,越往後越發現前面留了好多坑需要後期再做進壹步修正。有些朋友不把數據的分支想全面就會用很多if…else…來磊代碼。

不是不想用Switch,只是因為編碼時,太隨性。所以想做專職的開發人員,對代碼的宏觀視角是必不可少的,並且編碼時還要為今後的修改留有余地。

不是盡量別用,而是不合適沒法用,合適得時候該用還是用。

比如說,變量i要求大於10,小於20,壹條if(i>10&&i

  • 上一篇:電動自行車的EABS剎車原理是什麽?
  • 下一篇:數據結構-串的模式匹配
  • copyright 2024編程學習大全網