Code Complete笔记——第7章 子程序

第7章 高质量的子程序

7.1 创建子程序的正当理由

降低复杂度(缩小代码规模、改善可维护性、提高正确性):内部循环或条件判断嵌套很深,考虑子程序;

引入中间、易懂的抽象,提高可读性;

避免代码重复;

支持子类化;

隐藏顺序:把需要按顺序完成的事情放到一起,对外隐藏细节;

隐藏指针操作;

提高可移植性:不可移植的部分包括非标准功能、对硬件和操作系统的依赖等;

简化复杂的布尔判断;

改善性能,减少需要进行优化的地方;

*简单小巧的子程序

提高可读性;

为之后可能变复杂的操作进行封装;


7.2 在子程序层上的设计

功能上的内聚:一个子程序仅执行一项操作;

顺序上的内聚:一个子程序包含需按特定顺序完成的操作,它们需要共享数据,只有全部执行完毕后才完成一项功能;

通信上的内聚:一个子程序中的不同操作使用同样的数据,而不存在其他任何联系;

临时的内聚性:因为需要同时执行才放到一起的操作组成的子程序,如startup(),shutdown()等。

*不可取的内聚

过程上的内聚:特定顺序完成的操作(与顺序上的内聚有何不同?);

逻辑上的内聚:若干操作在同一子程序,通过传入控制标志选择执行(如果子程序的代码仅由if/else或case语句以及调用其他子程序的语句组成,那么是允许的,此时它的唯一功能就是发布各种命令——“事件处理器”);

巧合的内聚性:无任何关联的操作被凑在一起;

7.3 好的子程序名字

描述子程序所做的所有事情,包括输出结果及其副作用;

避免使用无意义表述不清的动词,如handle,dealwithOutput等;

不要通过数字来形成不同的子程序名字;

根据需要确定名字长度:9-15;

要对返回值有所描述;

使用语气强烈的动宾结构,如printDocument(),如果是针对对象,则可省去宾语,如document.print();

准确使用对仗词;

为常用操作确立命名规则;

7.4 子程序可以写多长

一屏代码(50-150行),方便查看上下文;

7.5 如何使用子程序参数

按照输入-修改-输出的顺序排列参数,考虑不同的命名规则;

如果几个子程序都用了类似的一些参数,应该让参数的排列顺序保持一致,产生记忆效应;

使用所有的参数;

把状态或出错变量放在最后;

不要把子程序的参数用作工作变量,应该使用局部变量,防止输入变量被修改;

在接口中对参数的假定加以说明,相比于写在注释中,更好的方式是使用断言(指明参数输入修改或输出,大卫,状态代码和错误值的含义,范围,特定数值等);

7+-2原则;


你可能感兴趣的:(Code Complete笔记——第7章 子程序)