作者對switch的建議,就是盡量不用,
Instead, here is much simpler advice: don’t use switch .
他舉了一個例子,
char c;
while ((c = get_opt(...))){
switch(c){
case 'v':
verbose++;
break;
case 'w':
weighting_function();
break;
case 'f':
fun_function();
break;
}
}
這段CODE 突顯了,忘了寫break;會導致程式跑的意思和想要的結果不一樣。
而break;會因為case的數目,而反覆出現多次。
作者建議用IF來改寫。
char c;
while ((c = get_opt(...))){
if (c == 'v')
verbose++;
else if (c == 'w') weighting_function();
else if (c == 'f') fun_function();
}
不知各位覺得如何?
我看範例碼還是看不出來為何不要用 switch的理由。 如果是因為會忘記寫 break,那是紀律的問題。 其實用 if , else if 這樣的多層結構,可讀性是更差,而且如果要改變判斷及處理的優先次序,用if會超難改,如果是用switch,只要整塊搬到前面就好。
switch 的編譯結果也不會輸if 的,如果是兩三個case, 其實編譯器會用 if 的判斷模式來作,如果有一大堆case的話,就會直接用查表法來作,所以效率上是不用擔心的。
如果被判斷的參數只有一個,狀況又會超過三個的,我會毫不考慮用 switch 方法,就是因為程式很容易看得懂。
同意樓上!!!!
break有時也故意不寫!但對於初學者的確容易混淆!
當分支超過五、六層時,switch的可讀性還是優於if。
100%同意,如果有部分動作會跟另一個case重複,就可以跟下一個case共用,不只是省break,更是實際省code.