使用条件语句
if—语句
根据所用语言的不同,你可能使用几种ⅲ语句中的任何一种。其中最简单的
是简单if或者 if-then语句。 if-then-else稍微复杂一点,而连续一组 if-then-else所
构成的语句串是最为复杂的。
卫语句
简单 if-then语句
编写if语句时请参考以下几点
-
首先写正常代码路径:再处理不常见情况
在编写代码时,要使得正常情况的执行路径在代码中是清晰的。确认那些不常见的情况不会遮掩正常的执行路径。这对可读性和代码性能来米说都很重要。
-
在出现等号情况时,一定要弄清程序的流向
请不要用“>”代替“>=”或用“<”代替“<=”
这类似于在访问数组或者计算循环下标的时候犯下off-by-one(偏差一)错误。在循环里,要仔细考虑端点以避免犯 off-by-one错误。在条件语句里,也要仔细考
虑条件是否同实际情况相符合,避免犯同样的错误 -
把正常情况的处理放在if后面而不要放在else后面
把你认为会正常出现的情况放在前面来处理。这符合把决策的结果代码放在尽可能靠近决策位置的一般原则。
-
让if子句后面跟随一个有意义的语句
if (sometest) ; else { // do something }哪怕仅仅为了少写那个额外的空语句行和else代码行,大多数有经验的程序
员也都会避免这么编写代码。这样写看上去很傻,而且修改起来也很容易:简单
地对ⅱf语句中的谓词作否定,把else子句中的代码移到if子句中来,并且去掉else
子句就可以了。下面就是修改后的代码。if (!sometest) { // do something } -
测试else语句正确性
-
检查if和else子句是不是弄反了
if-then-else语句
以下几条是在编写if-then-else时要遵循的:
- 用布尔函数调用(boolean function亦称逻辑函数)简化程序;-
- 把最常见的情形放在最开始;
- 保证覆盖全部情况;
- 假如你所使用的语言支持别的结构能代替if-then-else,替换掉if-then-else形式。
case—语句
为case选择最有效的排列顺序
可能的组织方法
-
按字母顺序或按数字顺序排列各种情况
-
把正常的情况放在前面
如果有一个正常的情况和多个异常情况,那么就把那个正常的情况放在最前面。用注释来说明它是正常情况,而其他的属于非正常情况
-
按执行频率排列case子句
把最经常执行的情况放在最前面,最不常执行的放在最后。这样做有两个方面的好处。首先,阅读程序的人可以很容易地找到最常见的情况。那些检索情况列表,找出某个具体情况的读者很可能会对最常见的情况感兴趣,而把常见的情况放在代码的上部会加速这种检索。
使用case语句的诀窍
-
使每种情况对应的执行语句最简单。
简短的情况处理代码会使case语句的结构更加清晰。如果某种情况执行的操作非常复杂,那么就写一个子程序,并在该情况对应的case子句中调用它,而不要把代码本身
放进这一case子句里。 -
不要为了用case语句而去定义伪变量
case语句应该用于处理简单的、容易分类的数据。如果你的数据并不简单,那么就使用if- then-else语句串。为使用case而刻意构造出的变量很容易把人搞糊涂,你应该避免使用这种变量例如,不要这么做.
-
把 default子句只用于检查真正的默认情况
也许有时候你只剩下了一种情况需要处理,于是就决定把这种情况编写为 default子句(默认子句)。尽管这么做有时候很诱人,但却是很不明智的。你将失去cae语句的标号( label)所提供的自动说明功能,而且也丧失了使用 default子句检测错误的能力
-
在C语言中,case语句的最后都应当准确无误地标明结束。
核对表—使用条件语句
if-then 语句
- 代码的正常路径清晰吗?
- if-then测试对等量分支的处理方式正确吗?
- 使用了else字句并加以说明吗?
- else字句用的对吗?
- 用对了if和else子句,即没把他们用反?
- 需要执行的正常情况是位于if而不是else子句里吗?
if-then-else-if子句
- 把复杂的判断封装到布尔函数调用里了吗?
- 先判断最常见的情况了吗?
- 判断包含所有的情况吗?
- if-then-else-if是最佳实现吗?比case语句还要好吗?
case语句
- case子句排序得有意义吗?
- 每种情况的操作简单吗?必要的时候调用了其他子程序吗?
- case语句检测的时一个真实的变量,而不是一个只为了滥用case语句而刻意制造变量吗?
- 默认子句用得合法吗?
- 用默认子句来检测和报告意料之外的情况了吗?
- 在C、C++或者Java里,每一个case的末尾都有一个break吗?
Key Points
- 对于简单的if-else语句,请注意if子句和else子句的顺序,特别是用它来处理大量错误的时候。要确认正常的情况是清晰的。
- 对于if-then-else语句串和case语句,选择一种最利于阅读的排序
- 为了捕捉错误,可以使用case语句中的default子句(默认子句),或者使用if-then-else语句串中的最后那个else子句
- 各种控制结构并不是生来平等的。请为代码的每个部分选用最合适的控制结构
本文深入探讨了条件语句的使用技巧,包括if-then、if-then-else及case语句的编写策略,强调了正常路径清晰的重要性,并提供了代码审查清单。
259

被折叠的 条评论
为什么被折叠?



