《代码大全2》

《代码大全2》


第六章 可以工作的类

  • 抽象数据类型ADT :一组数据 和 对其的操作
  • 类可以看成是 ADT + 继承 +多态
    • 良好的类接口,类接口可以看成类共有子程序所构成的集合
    • 类接口应该表现一致的抽象层次。
    • 尽可能让接口可编程,而不是表达语义。将接口中逻辑部分转换为编辑器能实施的部分,如使用assert等。
  • 一般来说应该尽量减少类和类之间相互合作的范围
    • 减少实例化对象的数量
    • 减少实例对象调用不同子程序的数量

高质量的子程序

  • 变量名最好在9~15个字母之间
  • 子程序名(方法名)则视命名是否清晰易懂而定
  • 子程序的行数不要超过200行(不算注释与空行),否则可读性会下降
  • 不要把子程序的参数用与计算处理,要用局部变量在子程序内处理
  • 为子程序传递参数是多个变量还是一个对象,应该根据子程序参数的抽象层次上考虑。

防御式编程

  • 子程序应该不应传入错误数据而被破坏
  • 来写自己的断言,(在生产阶段关闭断言)
  • 用断言来处理绝不应该发生的情况,而用错误处理代码来处理预期可能发生的状况。
  • 隔离程序使其包容由错误产生的损害,让软件的某些部分处理“不干净的数据”,而让另一部分处理“干净的数据”,比如类的公用方法可以处理不干净的数据,而在调用私有方法时则认为数据都是干净的。在得到外部数据时可以得到清理,有时候多层清理也是应当的。

伪代码的编码过程

  • 不要涉及编程语言,从子程序的意图上去写伪代码,伪代码可以在之后变成子程序的注释
  • 子程序的高层设计至少要说明:
    • 子程序要隐藏的信息
    • 各项输入信息
    • 输出信息
    • 调用子程序的前条件
    • 子程序在回调之前要确保后条件成立

使用变量的一般事项

  • 在靠近变量第一次使用的地方初始化它(代码不会看起来很乱吗?)
  • 在可能的情况下使用final
  • 在类的构造函数中初始化数据成员(对应的是在析构函数中释放内存,如果在gc机制的语言中,这点还必要吗?)
  • 尽量减少变量的作用域和生存时间增加代码的可读性,虽然写的时候可能麻烦一点)
  • 为变量指定单一用途(接口中的方法也一样)(增加代码的可读性,写的时候可能麻烦一点)

变量名的力量

  • 对变量的描述就是最佳的变量名
  • 为循环下标命名(而不是简单的使用 i j k)
  • 标记全局变量(加上g_)()

组织直线型代码

  • 尽力写没有顺序依赖的代码;如果必须有,用子程序名来表明顺序依赖关系,或者在注释中注明。

使用条件语句

  • 首先处理正常情况,并将正常情况放在if处 而不是else处。

重构

  • 重构的理由
    • 代码重复
    • 冗长的子程序
    • 循环过长或者嵌套过深
    • 类的借口未能提供层次一致抽象
    • 拥有太多的参数列表
  • 重构策略
    • 在增加子程序的时候重构
    • 在添加类的时候重构
    • 在修补缺陷的时候重构
    • 关注易于出错的模块
    • 重构的含义在于不影响程序行为的前提上改进可运行的代码

代码调整方法

  • 在知道结果时停止判断
  • 按照出现的频率来调整判断顺序
  • 在循环中,如果循环是一个查找循环,可以使用哨兵值来减少每次循环所需要的判断时间
    • 将所需要查找的值放在数组的末尾,这样可以保证循环一定会停止,也可以减少每次循环判断 i < array,count的判断时间。
  • 多层循环时,将循环次数多的放在循环的外围。

个人性格

  • 力图理解编译器的错误
  • 彻底理解自己的程序而不是看看程序员是否能运行
    • 有时候一个程序太大,过一段时间真的理解不过来啊。。
  • 在开发过程中建立自我意识,如果分配给你的净是些不能提升自己能力的短期工作,你理应表示不满。

感觉一般,感觉这本书主要讲的还是提升代码的可阅读性。

posted @ 2016-01-07 11:14  孙焱焱  阅读(814)  评论(0编辑  收藏  举报