15.1 if语句
简单if-then语句
- 首先写正常代码路径,再处理不常见情况
- 确保对于等量的分支是正确的:即注意off-by-one的错误
- 把正常情况的处理放在if后面而不要放在else后面:间隔放置正确和错误处理会影响代码的可读性
- 让if字句后面跟随一个有意义的语句
- 考虑else字句:经典分析发现,有5到8成的if语句都应该配有一个else字句,因此可以在else中写一个空语句,来表明else情况已经考虑过了,我个人的处理一般是如果else不需要处理的情况下会在else里面加入注释说明,来说明为什么不加处理,这样方便后期阅读代码和查找问题,个人理解,希望大神拍砖
- 测试else子句的正确性
- 检查if和else子句是不是弄反了
if-then-else 语句串
- 利用布尔函数调用简化复杂的检测:通过函数代替条件判断来增加代码的可读性
- 把最常见的情况放在最前面
- 确保所有的情况都考虑到了:写在最后一个else字句,用出错消息或者断言来捕捉那些你不考虑的情况
- 如果你的语言支持,请把if-then-else语句串替换成其他结构:比如C语言中的case语句
15.2 case语句
为case选择最有效的排列顺序
- 按字母顺序或按数字顺序排列各种情况
- 把正常的情况放在前面
- 按执行频率排列case子句
使用case语句的诀窍
- 简化没中情况对应的操作:每种情况处理代码应该短小精悍,这样使case结构条理更清晰,如果某种情况执行的操作非常复杂,那么就写子程序
- 不要为了使用case语句而可以制造一个变量:不要为了用case而用case语句,每种语句都有优点缺点和适用性
- 把default子句只用于检查真正的默认情况:default不应该包含你能考虑到的正常的情况处理
- 利用default子句来检测错误
- 在C、C++和Java里,每一个case都要进行break,避免执行到下一个case语句
要点
- 对于简单的if-else语句,请注意if子句和else子句的顺序,特别是用它来处理大量错误的时候,要确认正常的情况是清晰的;
- 对于if-then-else语句串和case语句,选择一种最有利于阅读的排序
- 为了捕捉错误,可以使用case语句中的default子句,或者使用if-then-else语句串中的最后那个else子句
- 各种控制结构并不是生来平等的,请为代码的每个部分选用最合适的控制结构