1 2 3 4

阅读笔记

《构建之法》这本书写的生动有趣,在这个比较枯燥的领域,这本书的趣味性使我第一次阅读便读了30多页,今天的阅读笔记是关于代码规范的。

好的代码规范会使阅读你的代码的人赏心悦目,条理清晰。而如书上代码清单4-1的那样,会让人想找到原作者锤爆他的狗头。

“代码规范”可以分成两个部分:
1.代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
2.代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则。

代码风格的原则是:简明,易读,无二异性。
代码风格规范包括:1.缩进(4个空格)2.行宽(100字符)3.括号(表示逻辑优先级)4.断行与空白的{}行(看清结构和对应关系)5.分行(不能把多个变量放在同一行)6.命名(确切语义)7.下划线(用来分隔变量名字中的作用域标注和变量的语义)8.大小写(使变量名易读)9.注释(解释程序的what和why)

其中对我触动比较大的就是命名和注释,我的变量的命名大多是汉语的拼音,只有少数用清楚地命名,如最大值,日期之类简单的,更多的是“shuiwang”,“ditiezhan”,程序中的实体、变量是程序员昼思夜想的对象,要起一个好的名字才行。大家都知道用单个字母给有复杂语义的实体命名是不好的,在C语言家族中,比较通用的,也是经过了很多实践检验的方法叫“匈牙利命名法”。例如:fFileExist,表明是一个bool值,表示文件是否存在;szPath,表明是一个以0结束的字符串,表示一个路径。如此命名的目的是让程序员一眼就能看出变量的类型, 避免用错。例如这样的命名你可以清晰的了解确切的语义这是我以后需要努力的。而注释是为了解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方。复杂的注释应该放在函数头,很多函数头的注释都用来解释参数的类型等,如果程序正文已经能够说明参数的类型in/out,就不要重复!注释也要随着程序的修改而不断更新,一个误导的( Misleading )注释往往比没有注释更糟糕另外,注释(包括所有源代码)应该只用ASCII字符,不要用中文或其他特殊字符,否则会板大地影响程序的可移植性。

代码设计规范不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面。

代码设计规范包括:1.函数。最重要的原则是:只做1件事, 并且要做好。2.goto,函数最好有单一的出口。3.错误处理(1.参数处理:在debug版本中,所有参数都要验证正确性。2.断言:验证正确性)4.如何处理C++中的类(

1.类
1)使用类来封装面向对象的概念和多态( Polymorphism)。
2)避免传递类型实体的值,应该用指针传递。换句话说,对于简单的数据类型,没有必
要用类来实现。
3)对于有显式的构造和析构函数的类,不要建立全局的实体,因为你不知道它们在何时
创建和消除。
4)仅在必要时,才使用“类”。
2. class vs. struct
如果只是数据的封装,用struct即可。
3. 公共/保护私有成员(pubic. potectede和pivatc)按照这样的次序来说明类中的成员: pubuic . poteted pruvt
4. 数据成员
1)数据类型的成员用m_ name说明。
2)不要使用公共的数据成员,要用inline访问雨数,这样可兼顾封装和效率。
5. 虚函数(Virtual Function )
1)使用虚函数来实现多态

2)仅在很有必要时,才使用虚函数。
3)如果一个类型要实现多态,在基类( Base Class )中的析构丽数应该是虚两数

6.构造函数

1)不要在构造函数中做复杂的操作,简单初始化所有数据成员即可。
2 )构造函数不应该返回错误(事实上也无法返回)。把可能出错的操作放到Hrntli()或
FInit()中。
7.析构函数 ( Destructor)
 1)把所有的清理工作都放在析构函数中。如果有此资源在析构函数之前就释放了,记住要重置这些成员为0或NULL。2)析构函数也不应该出错。
8. new 和delete
1)如果可能,实现自己的new/delete,这样可以方便地加上自己的跟踪和管理机制。自
 已的new/ delete可以包装系统提供的new/delete。2)检查new的返回值。new不定都成功。3)释放指针时不用检查NULL。
9.运算符( Operators )
1)在理想状态下,我们定义的类不需要自定义操作符。确有必要时,才会自定义操作符。

2)运算符不要做标准语义之外的任何动作。例如,”-的判断不能改变被比较实体的状态。
 3)运算符的实现必须非常有效率,如果有复杂的操作,应定义一个单独的限数,

4)当你拿不定主意的时候,用成员函数,不要用运算符。

10.异常( Exceptions )
1)异常是在“异乎寻常”的情况下出现的,它的设置和处理都要花费“异乎寻常”的开销,t()或  所以不要用异常作为逻辑控制来处理程序的主要流程。
 2)了 解异常及处理异常的花销,在C++语言中,这是不可忽视的开销。3)当使用异常时,要注意在什么地方清理数据。
 4)异常不能跨过DLL或进程的边界来传递信息,所以异常不是万能的。

11类型继承( Class Inheritance )
1)仅在必要时,才使用类型继承。
2)用const标注只读的参数(参数指向的数据是只读的,而不是参数本身)。3)用const标注不改变数据的函数。
)
说的很多,但大多是书上的内容。

posted @ 2021-02-28 21:50  小陈的太阳  阅读(37)  评论(0编辑  收藏  举报