The Practice of Programming Chapter One - Style

本文是The Practice of Programming Chapter one,Style的读书笔记。这本书里讨论了程序设计中许多重要和实际的问题,是我们在平时学习中应该注意的。就像书中所告诫的一句话,在学习的过程中,应该始终养成一种好的习惯,而不是在以后的学习中,痛苦地为自己打着无数的补丁

程序设计的风格,包括:具有说明性的名字清晰的表达式直截了当的控制流可读的代码和注释 ,以及在追求这些内容时一致地使用某些规则和惯用法 的重要性。因为,草率的代码是很坏的代码,它不仅难看、难读、而且经常崩溃。所以,我们要牢记:好风格应该成为一种习惯

下面分别记录了程序设计风格中的一些要点和注意事项。

1   名字
(1) 全局变量使用具有说明性的名字,局部变量用短名字。
(2) 保持一致性。相关的东西应给以相关的名字,以说明它们的关系和差异。
(3) 函数采用动作性的名字。函数名应当用动作性的动词,后面可以跟着名词,如 getTime()。
(4) 函数的名字要准确。名字不仅是个标记,它还携带着给读程序人的信息。

2   表达式和语句
(1) 用缩行显示程序的结构。采用一种一致的缩行风格,是使程序呈现出结构清晰地最省力的办法。
(2) 使用表达式的自然式。
(3) 用加括号的方式排出二义性。
(4) 分解复杂的表达式。
(5) 要清晰。我们的目标应该是写出最清晰的代码,而不是最巧妙的代码。
(6) 当心副作用。像++这一类运算符具有副作用,它们除了返回一个值外,还将隐含地改变变量的值。

3   一致性和习惯用法
(1) 使用一致的缩排和加括号风格。实际上,特定风格远没有一致地使用它们重要。
(2) 为了一致性,使用习惯用法。在学习一个语言的过程中,一个中心问题就是逐渐熟悉它的习惯用法。
(3) 用else-if表达多路选择。一系列嵌套的if语句通常是说明了一段粗劣笨拙的代码,或许就是真正地错误。这里要遵循的规则是:一个判断应该尽可能接近它所对应的动作,也就是说,一旦做过了一个测试,马上就应该去做某些事情。

4   函数宏
(1) 老的C语言程序员中有一种倾向,就是把很短的执行频繁的计算写成宏,而不是定义为函数。人们这样做最根本的理由就是执行效率:宏可以避免函数调用的开销。
(2) 避免函数宏。到了今天,有了新型的机器和编译程序,函数宏的缺点就远远超过它能带来的好处。
(3) 在C++里,内联函数的使用消减了函数宏的用武之地。
(4) 函数宏最常见的一个严重问题是:如果一个参数在定义中出现多次,它就可能被多次求值。有时多次求值带来的是执行效率的问题,而有时是错误的实现。
(5) 宏将在它每次被调用的地方进行实例化,结果会导致被编译的程序变大(C++的内联函数也存在这个缺点)。
(6) 给宏的体和参数都加上括号。如果你真的要使用宏函数,那么请特别小心:宏是通过文本替换方式实现的。
(7) C++提供的内联函数既避免了语法方面的麻烦,而且又可得到宏能提供的执行效率,很合适用来定义那些设置或者提取一个值的短小函数。

5   神秘的数
(1) 神秘的数包括各种常数、数组的大小、字符位置、 变换因子以及程序中出现的其他以文字形式写出的数值。
(2) 给神秘的数起个名字。目的是使代码的意义一目了然。
(3) 把数定义为常数,不要定义为宏。在C和C++里,整数常数可以用枚举语句声明;在C++里任何类型都可使用const声明的常数。注意,C语言里也有const值,但它们不能用作数组的界,这样,enum就是C中惟一可用的选择了。
(4) 使用字符形式的常量,不要用整数。
(5) 利用语言去计算对象的大小。不要对任何数据类型使用显式写出来的大小。例如,我们应该用sizeof(int)而不是2或者4。基于同样的原因,写sizeof(array[0])可能比sizeof(int)更好,因为即使是数组的类型改变了,也没有什么东西需要改变。

6   注释
(1) 不要大谈明显的东西。注释不要去说明明白白的事,比如i++能够将i值加1等等。注释应该提供那些不能一下子从代码中看到的东西,或者把那些散布在许多代码里的信息收集到一起。当某些难以捉摸的事情出现时,注释可以帮助澄清情况。
(2) 给函数和全局数据加注释。
(3) 不要注释差的代码,应该重写它。
(4) 注释不要与代码矛盾。
(5) 我们应该尽可能地把代码写得容易理解,在这方面做的越好,需要写的注释就越少。好的代码需要的注释远远少于差的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值