《代码大全》笔记 4 - 语句

豆瓣:https://book.douban.com/subject/1477390/

《Code Complete》2d ed,CC2

第 14 章 组织直线型代码

核对表

  • 代码使得语句之间的依赖关系变得明显吗
  • 子程序的名字使得依赖关系变得明显吗
  • 子程序的参数使得依赖关系变得明显吗
  • 代码容易按照自上而下的顺序阅读吗
  • 相关的语句被组织在一起了吗
  • 把相对独立的多个语句放进子程序里了吗

第 15 章 使用条件语句

核对表

  • 需要执行的正常情况是位于 if 而不是 else 子句里吗
  • 把复杂的判断封装到返回布尔值的函数里了吗
  • 先判断最常见的情况了吗
  • 判断包含了所有的情况了吗
  • case 子句的顺序是合理、有意义的吗
  • case 的默认子句用得合法吗

第 16 章 控制循环

循环的种类

  • 计数循环
  • 连续求值的循环
  • 无限循环
  • 迭代器循环
  • 循环体带退出的循环(break)

核对表

  • 避免初始化代码混入循环控制语句了吗?
  • 避免循环体计算代码混入循环控制语句了吗?
  • 把内务处理(复杂的循环控制代码)放在循环开始或结束处了吗?
  • 循环像定义良好的子程序那样只做一件事吗?
  • 循环体足够清晰吗,循环嵌套层次不多于 3 层吗?
  • 是否已把循环控制下标保存在专门的变量里,避免循环体外代码使用?
  • 循环控制使用的是整型或枚举吗,是否使用了浮点类型?
  • 循环在所有可能的条件下(无限循环类除外)都能终止吗?
  • 循环的退出条件清晰吗?

第 17 章 不常见的控制结构

核对表

  • return
    • 每一个子程序都仅在有必要的时候才使用 return 吗
    • 使用 return 有助于增强可读性吗
  • 递归
    • 递归子程序中包含了停止递归的代码吗
    • 子程序用安全计数器来确保该子程序能停下来吗
    • 递归只位于一个子程序里面吗
    • 子程序的递归深度处于程序栈容量可以满足的限度内吗
    • 递归是实现子程序的最佳方法吗?它要好于简单的迭代吗
  • goto
    • 是否只有在万不得已的时候才使用 goto?
    • 如果是出于效率因素而使用的 goto,那么对这种效率上的提升做出衡量并且加以说明了吗
    • 一个子程序里最多只使用了一个 goto 标号吗
    • 所有 goto 都是向前跳转而不是向后跳转吗
    • 所有 goto 标号都用到了吗

第 18 章 表驱动法

把程序中的信息存放在数据里而不是逻辑里——也就是说,放在表中而不是 if 检测中。

核对表

  • 你考虑过把表驱动法作为复杂逻辑的替换方案吗
  • 你考虑过把表驱动法作为复杂继承结构的替换方案吗
  • 你考虑过把表数据存储在外部并在运行期间读入,以便在不修改代码的情况下就可以改变这些数据吗
  • 如果无法用一种简单的数组索引去访问表,那么你把计算访问键值的功能提取成单独的子程序,而不是在代码中重复地计算键值吗

第 19 章 一般控制问题

核对表:控制结构相关事宜

  • 表达式中用的是 true 和 false,而不是 1 和 0 吗?
  • 有没有通过增加新的布尔变量、使用布尔函数和决策表来简化表达式?
  • 布尔表达式是使用肯定形式表达的吗?在需要使用括号来明确的地方都是用了括号吗?
  • 空语句表述得明显吗?

2020年11月11日

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页