Chapter 15 Using Conditionals
使用條件陳述式
15.1 if statements if語句
·Plain if-then Statements 簡單if-then語句
1. 首先寫正常的代碼途徑;再處理不常見情況
2. 確保對於等量的分支是正確的
3. 把正常的情況放在if後面,而不要else後面。盡量把所有正常的情況和所有錯誤的情況放在一起。
4. 讓if子句後面跟隨一個有意義的語句
例如,有時,你會看到
if(SomeTest)
;
else{
//do something;
}
應修改為:
if (!SomeTest)
{
//do something;
}
5. 考慮else子句
如果你認為自己只要一個簡單的if語句,那麼請考慮你是否真的不需要一個if-then-else語句。
通用汽車公司做的一項經典分析發現,有5至8成的if語句應該配有一個else子句(Elshoff 1976)。
一種選擇是,如果需要也可以用一個空語句,用以表明這種else情況考慮過了。除非空else部分其原因顯而易見,否則
請用注釋來解釋為什麼這裡else子句沒有必要,就象下面:
if(Color_Min <= color && color <= Color_Max){
......
}
else{
//else color is invalid.
}
6. 測試else子句的正確性
7. 檢查if和else子句是不是弄反了
·Chains of if-then-else Statements
if-then-else語句串
在不支援或者部分支援case的語言裡,會用到if-then-else語句串。請注意以下指導原則:
1. 利用布爾函數調用簡化複雜的檢測
2. 把最常見的情況放在最前面。
3. 確保所有的情況都考慮過了。
4. 如果你的語言支援,請把if-then-else語句串替換成其他結構,如Case或者switch等。
15.2 case Statements case語句
·Choosing the Most Effective Ordering of Cases
為case選擇最有效排列順序
1. 按字母順序或按照數字順序排列各種情況
2. 把正常的情況放在前面
3. 按執行頻率排列case子句
·Tips for Using case Statements
使用case語句的訣竅
1. 簡化每種情況對應的操作
2. 不要為了使用case語句而刻意製造一個變數
與其可以製造一個本不適用於case的假冒變數(phony variable),不如使用一個if-then-else-if檢測串來檢查變數
。
3. 把default子句只用於檢查真正的預設情況
也許有時候你只剩下一種情況需要處理,於是決定吧這中情況寫入default子句。儘管這麼做有時候很誘人,但確是很不
明智的。
4. 利用default子句來檢測錯誤
如果一條case語句中的預設子句既沒有用來做其他的處理,按照正常執行順序也不可能會發生,那麼就向裡面加入一條
診斷訊息吧。
請仔細檢查以確認每一個可能進入case語句的值都是合法的。如果你發現了一些不合法的值,那麼就重寫這些語句,讓
預設子句去執行錯誤偵測。
5. 在C++和JAVA裡,避免代碼執行越過一條case子句的末尾。
即,一定要每個case都要有break語句。
6. 在C++裡,在case末尾明確無誤地標明需要穿越執行的程式流程。
如果你故意讓代碼越過某個case子句的末尾,那麼就在相應的位置給出明確的注釋。
其實,這種代碼應該避免的。
Key Points 要點
·對於簡單的if-else語句,請注意if子句和else子句的順序,特別是用來處理大量錯誤的時候。要確認正常的情況是清晰的。
·對於if-then-else語句串和case語句,選擇一種最有利於閱讀的排序。
·為了捕捉錯誤,可以使用case語句中的default子句,或者使用if-then-else語句串中的最後那個else子句。
·各種控制結構並不是生來平等的。請為代碼的每個部分選用最合適的控制結構。