使用条件语句

来源:互联网 发布:阿里云虚拟主机购买 编辑:程序博客网 时间:2024/06/08 12:20

在编写 if 条件语句时,请遵循以下指导原则:

  1. 首先写正常代码路径,再处理不常见的情况;在编写代码时,要使得正常情况的执行路径再代码中是清晰的。
  2. 确保对于等量的分枝是正确的;请不要用 > 代替 >= 或用 <  代替 <=,这类似于在访问数组或者计算循环下标的时候犯下 off - by - one (偏差一) 错误。
  3. 把正常情况的处理放在 if 后面而不要放在 else 后面;把你认为会正常出现的情况放在前面来处理。这符合把决策的结果代码放在尽可能靠近决策位置的一般原则。这样可以使人的注意力集中到阅读代码的主流程上,而不是费力地去理解那些异常处理情况,因此整体代码更容易阅读。嵌套条件语句的下部积累了全部的错误情况是良好的错误 处理代码的一个标志。
  4. 让 if 子句后面跟随一个有意义的语句;有些时候你会看到一些代码,其中 if 子句是空的,尽量避免这种写法,只需要对 if 语句中的谓词作否定,去掉 else 子句就可以了。
  5. 考虑 else 子句;如果你认为自己只需要一个简单的 if 语句,那么请考虑你是否真的不需要一个 else 语句。如果需要也可以用一个空 else 语句,已表明这种情况已经考虑过了,或者在里面注释没有必要的原因。
  6. 仔细检查 if 语句和 else 语句是否放反了;
  7. 如果有多个 if 判断时,将最常见的情况放在最前面;

case 使用的几点建议:

  1. 简化每种情况对应的操作;简短的情况处理会使case语句的结构更加清晰,如果某种情况执行的操作非常复杂,那么就写一个子程序来调用。
  2. 把 default 子句只用于检查真正的默认情况; 也许有时候你只剩下了一种情况需要处理,于是就决定吧这种情况写为 default 子句(默认子句)。这样的话你将失去 case 语句的标号 label 所提供的自动说明功能,而且也丧失了使用 default 子句检测错误的能力。
  3. 利用 default 子句来检测错误;如果一条 case 语句中的默认子句及没有用来做其他的处理,按照正常执行顺序也不太可能发生,那么就向里面加入一条诊断消息。这样的消息在开发代码和产品版代码里都很有用。
  4. 避免代码执行越过一条 case 语句的末尾;你必须明确地为每一条 case 子句写结束语句(break 语句)。

关于循环的一些建议:

  1. 如果你预先并不知道循环有迭代多少次,那么使用 while 循环。有关 while 循环的最主要的事项就是决定在循环开始处还是结尾处做检测。
  2. 如果你需要一个执行次数固定的循环,那么 for 循环是个好选择。
  3. foreach 循环很适用于对数组或者其他容器的各项元素执行操作。它的优势在于消除了循环内务处理算数,从而也就消除了任何由循环控制算数导致出错的可能性。
  4. 循环要尽可能地短,以便能够一目了然。如果你常常在显示器上看循环,而你的显示器能够显示 50 行代码,那么就应该把循环的长度限制在 50 行以内。不过,如果你开始接受编写简单代码这一原则,那就很少会写出超过 15 或 20 行的循环。
  5. 把嵌套限制在 3 层以内。当循环超出 3 层以后,程序员对循环的理解能力会极大的降低。如果你的嵌套层次超过了这一数字,那么应该通过把某一部分提取为子程序或者简化控制结构的方式来缩短它。
  6. 把长循环的内容移到子程序里。
  7. 要让长循环格外清晰。

子程序中的多次返回

多数语言都提供了某种半途退出子程序的方法。程序可以通过 return 或 exit 这类控制结构,在任何需要的时候退出子程序。下面给出一些使用 return 的指导原则:

  1. 如果能增强可读性,那么就使用 return。在某些子程序里,一旦知道了答案,你会希望马上返回到调用方子程序,否则就意味着你还得写更多的代码。
    Comparison Compare ( int value1, int value2 ){    if ( value1 < value2 ){       return Comparision_LessThan;    }    else if ( value1 > value2 ){       return Comparision_GreaterThan;    }      return Comparision_Equal;}
  2. 用防卫子句(早返回或早退出)来简化复杂的错误处理。如果代码中必须要在执行正常操作之前做大量的错误条件检测,就很可能导致代码的缩进层次过深,并且这笔正常情况的执行路径。
    If file.validName() Then  If file.Open() Then    If encryptionKey.valid() Then      If file.Decrypt( encryptionKey ) Then        do some thing        ...      End If    End If  End IfEnd If
    从审美的角度讲,把子程序的主体缩在 4 条 if 语句里面很难看,尤其是当最里层 if 语句的代码非常多的时候,如果先检查错误情况,用这些代码来为正常的执行路径情路,那么代码的布局有事可能变得更清楚。
    If not file.validName() Then  error_status = FileError_InvalidFileName  Exit Sub  End IfIf file.Open() Then  error_status = FileError_CannotOpenFile  Exit Sub  End IfIf encryptionKey.valid() Then  error_status = FileError_InvalidEncryptionKey  Exit Sub  End Ifdo some thing...
  3. 减少每个子程序中 return 的数量。使用 return 要什么谨慎,只当它们都能增强可读性的时候才去使用。
原创粉丝点击