《代码大全》阅读笔记____[第六章] 高质量的子程序
1、子程序是为实现一个特定的目的而编写的一个个可被调用的方法(method)或过程(procedure)。
2、不好的子程序的布局:代码的物理组织形式几乎没有给出任何关于其逻辑组织的提示。
3、子程序应该有单一而明确的目的。
4、把一段代码放入一个命名恰当的子程序内,是说明这段代码用意的最好方法之一。
5、把布尔判断放入子程序中,以提高代码的可读性。
6、让每一个子程序只把一件事做好,不再做其他任何事情
7、顺序上的内聚性:是指在子程序内包含有需要按特定顺序执行的操作,这些步骤需要共享数据,而且只有在全部执行完毕后才完成了一项完整的功能。
8、通信上的内聚性:是指一个子程序中的不同操作使用了同样的数据,但不存在其他任何联系。
9、过程上的内聚性:是指一个子程序中的操作是按特定的顺序进行的。
10、逻辑上的内聚性:是指若干操作被放入同一个子程序中,通过传入的控制标志选择执行其中的一项操作。
11、巧合的内聚性:是指子程序中的各个操作之间没有任何可以看到的关联。
12、好的子程序名字:
(1)描述子程序所做的所有事情
(2)避免使用无意义的、模糊或表述不清的动词
(3)不要仅通过数字来形成不同的子程序名字
(4)给函数命名时要对返回值有所描述
(5)为常用操作确立命名规则
13、研究表明,变量名的最佳长度是9到15个字符。
14、研究表明,子程序的长度与错误量成反比,即:随着子程序长度的增加,每行代码所包含的错误量就会减少。
15、与其对子程序的长度强加限制,还不如让下面这些因素----如子程序的内聚性、嵌套的层次、变量的数量、决策点的数量、解释子程序用意所需的注释数量以及其他一些跟复杂度相关的考虑事项等----来决定子程序的长度。
16、子程序的参数:按照输入-修改-输出的顺序排列参数
17、使用C++中的const关键字来定义输入参数通常更为适宜。
18、如果几个子程序都用了类似的一些参数,应该让这些参数的牌类顺序保持一致。
19、不要把子程序的参数用做工作变量
20、一种比用注释还好的方法,是在代码中使用断言(assertions)。
21、心理学研究发现,通常人类很难同时记住超过7个单位的信息
22、如果你发现自己一直需要传递很多参数,这就说明子程序之间的耦合太过紧密了
23、考虑对参数采用某种表示输入、修改、输出的命名规则
24、子程序的接口要表达何种抽象?
25、函数是指有返回值的子程序;过程是指没有返回值的子程序。
26、把对子程序的调用和对状态值的判断清楚地分开。
27、如果一个子程序的主要用途就是返回由其名字所指明的返回值,那么就应该使用函数,否则就应该使用过程。
28、在函数开头用一个默认值来初始化返回值是一个很好的做法----这种方法能够在未正确地设置返回值时提供一张保险网。
29、把宏表达式整个包含在括号内
30、通常认为,用宏来代替函数调用的做法具有风险,而且不易理解----这是一种很糟糕的编程实践----因此,除非必要,否则还是应该避免使用这种技术。
31、inline可以用于定义可被编译为内嵌的代码的函数
32、inline子程序允许程序员在编写代码时把代码当成子程序,但编译器在编译期间通常会把每一处调用inline子程序的地方都转换为插入内嵌的代码。因此避免了子程序调用的开销,因此inline机制可以产生非常高效的代码。
33、子程序的长度是否是由其功能和逻辑自然确定,而非遵循任何人为的编码标准?
34、创建子程序最主要的目的是提高程序的可管理性;其中,节省代码空间只是一个次要原因;提高可读性、可靠性和修改刑等原因都更重要一些。只是在某个子程序的主要目的是返回由其名字所描述的特定结构时,才应该使用函数。