分析 Switch 相較於 if 的優點 1、switch 執行效率 高於 if 的執行效率 分析: switch是在編譯階段將子函數的地址和判斷條件綁定了,只要直接將a的直接映射到子函數地址去執行就可以了, if處理起來首先要把a的值放到CPU的寄存器中,然後要把比較的值放到CPU的另一個寄存器中 ...
分析 Switch 相較於 if 的優點
1、switch 執行效率 高於 if 的執行效率
分析:
switch是在編譯階段將子函數的地址和判斷條件綁定了,只要直接將a的直接映射到子函數地址去執行就可以了,
if處理起來首先要把a的值放到CPU的寄存器中,然後要把比較的值放到CPU的另一個寄存器中,然後做減法,然後根據計算結果跳轉到子函數去執行,這樣一來就要多出3步的操作了,如果邏輯判斷多的話,那麼將會比switch多處許多倍的操作,儘管寄存器操作的速度很快,但是效率方面還是不如switch ;
2、代碼清晰簡單易讀;
如下例子很清晰看到 什麼條件下可以執行哪個子函數
分析 Switch 相較於 if 的缺點
1、閱讀一下代碼快速尋找到問題
let a = 0; switch(a){ case 0: console.log("let is 0 ") break; case 1: console.log("let is 1 ") case 2: console.log("let is 2 ") }
缺點一、語法正確,邏輯錯誤
在第8行和第10行下麵我沒有添加關鍵字break; 這就導致這段代碼的行為邏輯與我的設計初衷不符了。
缺點二、語法比較死板
switch儘管對於break很寬容,但是對判斷條件很嚴苛,case後面只能跟常量
缺點三、需要子函數來處理分支
這個缺點跟缺點一有關,為了防止漏寫break
為什麼要使用break來做一個判斷結束呢?
最初代碼中是沒有子函數的概念的,那時候都是用goto隨意跳轉的,你想去第10行代碼,很簡單goto 10就可以了。這種編程思維在C的早期階段還是一直受到影響的,因此早期的C也沒有子函數,都是一堆邏輯處理混亂在一起,goto滿天飛,所以那時候你沒有一個最強大腦是寫不了程式的。那為了告訴程式我這裡條件判斷處理結束,就添加了break作為終止符號。
白茶清歡無別事,我在等風也等你,苦酒折柳今相離,無風無月也無你。