读书笔记:代码大全(第二版)


# 第二部分
## 第7章 高质量的子程序
    输入变量的值不应该被改变
    慎用全局变量
    子程序的作用应该单一而明确
    注意防范错误的输入数据
    不应该直接使用意义不明的数值
    子程序参数不应太多,最好不要超过7个
    子程序的参数应按照规律顺序排布
    子程序的有效注释要充分
    子程序的命名要能概括其作用

### 7.1 创建子程序的正当理由
    降低复杂度
    引入中间、易懂的抽象
    避免代码重复
    支持子类化
    隐藏顺序
    隐藏指针操作
    提高可移植性
    简化复杂的布尔判断
    改善性能
    确保所有子程序都很小
    隔离复杂度
    隐藏实现细节
    限制变化所带来的的影响
    隐藏全局数据
    行程中央控制点
    促成可重用的代码
    达到特定的重构目的

## 7.2 在子程序层上设计
内聚性,子程序中各种操作之间联系的紧密程度

    功能的内聚性
    顺序上的内聚性
    通讯上的内聚性
    临时的内聚性
    过程上的内聚性
    逻辑上的内聚性
    巧合上的内聚性

## 7.3 好的子程序名字
    描述子程序所做的所有事情
    避免使用无意义的、模糊或表述不清的动词
    不要仅通过数字来行程不同的子程序名字
    根据需要确定子程序名字的长度
    给函数命名时要对返回值有所描述
    给过程起名时使用预期强烈的动词加宾语的形式
    准确使用对仗词
    为常用操作确立命名规则

## 7.4 子程序可以写多长
最好在200行之内

## 7.5 如何使用子程序参数
    按照输入-修改-输出的顺序排列参数
    考虑自己创建in和out关键字,C++中的const来定义输入参数更为适宜
    如果几个子程序都用了类似的一些参数,应该让这些参数的排列顺序保持一致
    使用所有的参数
    把状态或出错变量放在最后
    不要把子程序的参数用作工作变量
    在接口中对参数的假定加以说明,合理使用断言
    把子程序的参数个数限制在大约7个以内
    考虑对参数采用某种表示输入、修改、输出的命名规则
    为子程序传递用以维持其接口抽象的变量或对象
    使用具名参数
    确保实际参数与形式参数相匹配

## 7.6 使用函数时要特别考虑的问题
## 7.7 宏子程序和内联子程序
    把宏表达式整个包含在括号内
    把含有多条语句的宏用大括号括起来
```
#define LookupEntry(key,index){
    index = (key - 10)/5;
    index = min(index,MAX_INDEX);
    index = max(index,MIN_INDEX);
}
```
    用给子程序命名的方法来展开后代码形同子程序的宏命名,以便在需要时可以用子程序来替换宏

宏子程序在使用上的限制


原文地址:https://www.cnblogs.com/bog-box/p/14735965.html