子程序 | 说明 |
---|---|
创建子程序的理由 | 降低复杂度 引入中间的、易懂的抽象 避免代码重复 支持子类化 隐藏顺序 隐藏指针操作 提高可移植性 简化复杂的布尔判断 改善性能 |
创建类的理由也是创建子程序的理由 | 隔离复杂度 隐藏实现细节 限制变化带来的影响 隐藏全局数据 形成中央控制点 促成可重用代码 达到特定的重构目的 |
功能的内聚性 | 最强最好的一种内聚性 一个子程序仅执行一项操作 |
不够理想的内聚性 | 顺序上的内聚性 通信上内聚性 临时的内聚性 |
不可取的内聚性 | 过程上的内聚性 逻辑上的内聚性:事件处理器 巧合地内聚性 |
好的子程序名字 | 描述子程序所做的的所有事情 避免使用无意义的、模糊或表述不清的动词 不要仅通过数字来形成不同的子程序的命名 根据需要确定子程序名字的长度 给函数命名时要对返回值有所描述:cos() 给过程起名时使用语气强烈的动词加宾语的形式:PrintDocment() 准确使用对仗词 为常用操作确立命名规则 |
常见的对仗词 | add/remove increment/decrement open/close begin/end insert/delete show/hide create/destroy lock/unlock source/target first/last min/max start/stop get/put next/previous up/down get/set old/new |
子程序可以写多长 | 50-150行代码 |
如何使用子程序参数 | 按照输入-修改-输出的顺序排队参数 几个子程序使用类似的参数,排列保持一致 把状态或出货变量放在最后 不要把子程序的参数当作工作变量 对参数的假定尽心说明:单位、范围、特殊值等 参数个数限制在7个以内 对参数采用某种表述输入、修改、输出的命名规则:i_、m_、o_前缀 为子程序传递用以维持其接口抽象的变量或对象 使用具名参数 确保实际参数与形式参数相匹配 |
宏子程序 | 把宏表达式整个包含在括号内 把含有多条语句的宏用大括号括起来 用给子程序命名的方法来给展开后代码形同子程序的宏命名,以便在需要时用子程序来替换宏,但这种做法具有风险 |