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子句。
·各种控制结构并不是生来平等的。请为代码的每个部分选用最合适的控制结构。