第4章 两人合作 阅读笔记
代码规范
计算机只关心编译生成的机器码,你的程序采用哪种缩进风格,变量名有无统一的规范等,与机器码的执行无关。但是,做一个有商业价值的项目,或者在团队里工作,代码规范相当重要。“代码规范”可以分成两个部分:
1. 代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
2. 代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则。
代码风格规范
缩进 4个空格
行宽 100字符
括号 在复杂的条件表达式中,用括号清楚地表示逻辑优先级。
断行 与空白的{ }行 每个“{”和“}”都独占一行
分行 不要把多条语句放在一行上。更严格地说,不要把多个变量定义在一行上。
命名 匈牙利命名法
下划线 下划线用来分隔变量名字中的作用域标注和变量的语义
大小写 由多个单词组成的变量名,如果全部都是小写,很不易读,一个简单的解决方案就是用大小写区分它们。
注释 注释是为了解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方。
代码设计规范
函数 现代程序设计语言中的绝大部分功能,都在程序的函数(Function、Method)中实现。关于函数,最重要的原则是:只做一件事,并且要做好。
goto 函数最好有单一的出口,为了达到这一目的,可以使用goto。
错误处理 参数处理在Debug版本中,所有的参数都要验证其正确性。在正式版本中,对从外部(用户或别的模块)传递过来的参数,要验证其正确性。
如何处理C++中的类
注意,除了关于异常(Exception)的部分,大部分其他原则对C#也适用。
1. 类
1)使用类来封装面向对象的概念和多态(Poly-morphism)。
2)避免传递类型实体的值,应该用指针传递。换句话说,对于简单的数据类型,没有必要用类来实现。
3)对于有显式的构造和析构函数的类,不要建立全局的实体,因为你不知道它们在何时创建和消除。
4)仅在必要时,才使用“类”。
2. class vs. struct如果只是数据的封装,用struct即可。
3. 公共/保护/私有成员(public、protected和private)按照这样的次序来说明类中的成员:public、pro-tected、private。
4. 数据成员
1)数据类型的成员用m_name说明。
2)不要使用公共的数据成员,要用inline访问函数,这样可兼顾封装和效率。
5. 虚函数(Virtual Function)
1)使用虚函数来实现多态(Polymorphism)。
2)仅在很有必要时,才使用虚函数。
3)如果一个类型要实现多态,在基类(Base Class)中的析构函数应该是虚函数。
6. 构造函数(Constructors)
1)不要在构造函数中做复杂的操作,简单初始化所有数据成员即可。
2)构造函数不应该返回错误(事实上也无法返回)。把可能出错的操作放到HrInit()或FInit()中。
7. 析构函数(Destructor)
1)把所有的清理工作都放在析构函数中为0或NULL。
2)析构函数也不应该出错。
8. new和delete
1)如果可能,实现自己的new/delete,可以包装系统提供的new/delete。
2)检查new的返回值。new不一定都成功。
3)释放指针时不用检查NULL。
9. 运算符(Operators)
1)在理想状态下,我们定义的类不需要自定义操作符。
2)运算符不要做标准语义之外的任何动作。
3)运算符的实现必须非常有效率,如果有复杂的操作,应定义一个单独的函数。
4)当你拿不定主意的时候,用成员函数 ,不要用运算符。
10. 异常(Exceptions)
1)异常是在“异乎寻常”的情况下出现的作为逻辑控制来处理程序的主要流程。
2)了解异常及处理异常的花销,在C++语言中,这是不可忽视的开销。
3)当使用异常时,要注意在什么地方清理数据。
4)异常不能跨过DLL或进程的边界来传递信息,所以异常不是万能的。
11. 类型继承(Class Inheritance)
1)仅在必要时,才使用类型继承。
2)用const标注只读的参数(参数指向的数据是只读的,而不是参数本身)。
3)用const标注不改变数据的函数。
代码复审
结对编程
在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。具体地说,结对编程有如下的好处:
1. 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。
2. 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
3. 在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。
总之,如果运用得当,结对编程可以取得更高的投入产出比(Return of Investment)