【規則1-21】按字母或數字順序排列各條case語句。
如果所有的case語句沒有明顯的重要性差別,那就按A-B-C或1-2-3等順序排列case
語句。這樣做的話,你可以很容易的找到某條case語句。比如:
switch(variable)
{
case?A:
//program?code
break;
case?B:
//program?code
break;
case?C:
//program?code
break;
…
default:
break;
}
【規則1-22】把正常情況放在前面,而把異常情況放在后面。
如果有多個正常情況和異常情況,把正常情況放在前面,并做好注釋;把異常情況放在
后面,同樣要做注釋。比如:
switch(variable)
{
///
//正常情況開始
case?A:
//program?code
break;
case?B:
//program?code
break;
//正常情況結束
//
//異常情況開始
case?-1:
//program?code
break;
//異常情況結束
//
…
default:
break;
}
【規則1-23】按執行頻率排列case語句
把最常執行的情況放在前面,而把最不常執行的情況放在后面。最常執行的代碼可能
也是調試的時候要單步執行的最多的代碼。如果放在后面的話,找起來可能會比較困難,而
放在前面的話,可以很快的找到。
【規則1-24】簡化每種情況對應的操作。
使得與每種情況相關的代碼盡可能的精煉。case語句后面的代碼越精煉,case語句的結
果就會越清晰。你想想,如果case語句后面的代碼整個屏幕都放不下,這樣的代碼誰也難
看得很清晰吧。如果某個case語句確實需要這么多的代碼來執行某個操作,那可以把這些
操作寫成一個或幾個子程序,然后在case語句后面調用這些子程序就ok了。一般來說case
語句后面的代碼盡量不要超過20行。
【規則1-25】不要為了使用case語句而刻意制造一個變量。
case語句應該用于處理簡單的,容易分類的數據。如果你的數據并不簡單,那可能使用ifelse
if的組合更好一些。為了使用case而刻意構造出來的變量很容易把人搞糊涂,應該避免
這種變量。比如:
char?action?=?a[0];
switch?(action)
{
case?‘c’:
fun1();
break;
case?‘d’:
…
break;
default:
break;
}
這里控制case語句的變量是action。而action的值是取字符數組a的一個字符。但是這
種方式可能帶來一些隱含的錯誤。一般而言,當你為了使用case語句而刻意去造出一個變
量時,真正的數據可能不會按照你所希望的方式映射到case語句里。在這個例子中,如果
用戶輸入字符數組a里面存的是“const”這個字符串,那么case語句會匹配到第一個case
上,并調用fun1()函數。然而如果這個數組里存的是別的以字符c開頭的任何字符串(比
如:“col”,“can”),case分支同樣會匹配到第一個case上。但是這也許并不是你想要的結
果,這個隱含的錯誤往往使人抓狂。如果這樣的話還不如使用if-else?if組合。比如:
if(0?==?strcmp(“const”,a))
{
fun1();
}
else?if
{
…
}
【規則1-26】把default子句只用于檢查真正的默認情況。
有時候,你只剩下了最后一種情況需要處理,于是就決定把這種情況用default子句來
處理。這樣也許會讓你偷懶少敲幾個字符,但是這卻很不明智。這樣將失去case語句的標
號所提供的自說明功能,而且也喪失了使用default子句處理錯誤情況的能力。所以,奉勸
你不要偷懶,老老實實的把每一種情況都用case語句來完成,而把真正的默認情況的處理
交給default子句。__