• 《代码大全2》


    《代码大全2》


    第六章 可以工作的类

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

    高质量的子程序

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

    防御式编程

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

    伪代码的编码过程

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

    使用变量的一般事项

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

    变量名的力量

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

    组织直线型代码

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

    使用条件语句

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

    重构

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

    代码调整方法

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

    个人性格

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

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

  • 相关阅读:
    linux下syscall函数 间接系统调用
    多线程 概述
    linux 信号与多线程
    linux ps命令介绍
    终端 进程关系
    shell 前台进程组的选择
    try catch finally的执行顺序到底是怎样的?
    OpenCV中遇到Microsoft C++ 异常 cv::Exception
    hdu1087Super Jumping! Jumping! Jumping!(最大递增序列和)
    [置顶] java Gui 键盘监听事件
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5109126.html
Copyright © 2020-2023  润新知