编程规则汇编

风格:
  • 全局变量用具有描述意义的名字,局部变量用短名字。
  • 保持一致性。
  • 函数采用动作性的名字。
  • 要准确。
  • 以缩行形式显士程序的结构。
  • 使用表达式的自然形式。
  • 利用括号排除歧义。
  • 分解复杂的表达式。
  • 要清晰。
  • 当心副作用。
  • 使用一致的缩行和加括号风格。
  • 为了一致性,使用习惯用法。
  • 用else-if处理多路选择。(这里是指避免使用if里面套if的用法)
  • 避免使用函数宏。
  • 给宏的体和参数都加上括号。(或者用do{...}while(0);的方式)
  • 给神秘的数起个名字。
  • 把数字定义为常量,不要定义为宏。
  • 使用字符形式的常量,不要用整数。
  • 利用语言去计算对象的大小。
  • 不要大谈明显的东西。
  • 给函数和全局数据加注释。
  • 不要注释不好的代码,应该重写。
  • 不要与代码矛盾。
  • 澄清情况,不要添乱。

界面:
  • 隐藏实现的细节。
  • 选择一小组正交的几本操作。
  • 不要在用户背后搞小动作。
  • 在各处都用同样方式做同样的事。
  • 释放资源与分配资源应该在同一层次进行。
  • 在低层检查错误,在高层处理。
  • 只把异常用在异常的情况。

除错:
  • 寻找熟悉的模式。
  • 检查最近的改动。
  • 不要两次犯同样的错误。
  • 现在排除,而不是以后。
  • 取得堆栈轨迹。
  • 键入前仔细读一读。
  • 把你的代码解释给别人。
  • 把错误弄成可以重现的。
  • 分而治之。
  • 研究错误的计数特性。
  • 显示输出,使搜索局部化。
  • 写自检测代码。
  • 写记录文件。
  • 画一个图。
  • 使用工具。
  • 保留记录。

测试:

  • 测试代码的边界情况。
  • 测试前条件和后条件。
  • 使用断言。
  • 做防御性程序设计。
  • 检查错误的返回值。
  • 以递增方式做测试。
  • 首先测试最简单的部分。
  • 弄清所期望的输出。
  • 检验那些应当保持的特征。
  • 比较相互独立的实现。
  • 度量测试的覆盖面。
  • 自动回归测试。
  • 建立自包容测试。

性能:
  • 自动计时测量。
  • 使用轮廓程序。
  • 集中主意热点。
  • 画一个图。
  • 使用更好的算法或数据结构。
  • 让编译程序做优化。
  • 调整代码。
  • 不要优化无关紧要的东西。
  • 收集公共表达式。
  • 用低价操作代替高代价操作。
  • 铺开或删除代码。
  • 缓存频繁使用的值。
  • 写专用的存储分配程序。
  • 对输入输出做缓冲。
  • 特殊情况特殊处理。
  • 预先算出某些值。
  • 使用近似值。
  • 在某个低级语言里重写代码。
  • 使用尽可能小的数据类型以节约存储。
  • 不存储容易重算的东西。

可移植性:
  • 盯紧标准。
  • 在主流中做程序设计。
  • 警惕语言的麻烦特性。
  • 用多个编译系统试验。
  • 使用标准库。
  • 只使用到处都能用的特征。
  • 避免条件编译。
  • 把系统依赖性局限到独立文件里。
  • 把系统依赖性隐藏在界面后面。
  • 用正文做数据交换。
  • 数据交换时用固定的字节序。
  • 如果改变规范就应该改变名字。
  • 维护现存程序与数据的相容性。
  • 不要假定与数据的相容性。
  • 不要假定是ASCII。
  • 不要假定是英语。

至于出处,已经记不得。

你可能感兴趣的:(设计模式,数据结构,编程,算法)