【代码大全】——使用条件语句

本文深入探讨了条件语句的使用技巧,包括if-then、if-then-else及case语句的编写策略,强调了正常路径清晰的重要性,并提供了代码审查清单。

使用条件语句

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值