第七章 高质量的子程序

匿名 (未验证) 提交于 2019-12-03 00:02:01

降低复杂度;
引入中间、易懂的抽象;
避免代码重复;
支持子类化;
隐藏顺序;
隐藏指针操作;
提高可移植性;
简化复杂的布尔判断;
改善性能;
确保所有的子程序都很小。

功能内聚性是最强也是最好的一种内聚性,也就是说让一个子程序仅执行一项操作。

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

理论上认为子程序最佳长度是一屏代码或打印出来一到两页的代码,也就是约50~150行代码。

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

函数和过程,设置程序的返回值。

把宏表达式整个包含在括号内;
把含有多条语句的宏用大括号括起来;
用子程序命名的方法给展开后代码形同子程序的宏命名,以便在需要时可以用子程序来替换宏。

大局事项
- [ ] 创建子程序的理由充分吗?
- [ ] 一个程序中所有适于单独提出的部分是不是已经被提出到单独的子程序中了?
- [ ] 过程的名字中是否用了强烈、清晰的“动词+宾语”词组?函数的名字是否描述了其返回值?
- [ ] 子程序的名字是否描述了它所做的全部事情?
- [ ] 是否给常用的操作建立了命名规则?
- [ ] 子程序是否具有强烈的功能上的内聚性?即它是否做且只做一件事,并且把它做好?
- [ ] 子程序之间是否有较松的耦合?子程序与其他子程序之间的连接是否是小的、明确的、可见的和灵活的?
- [ ] 子程序的长度是否是由其功能和逻辑自然决定,而非遵循任何认为的编码标准?
参数传递事宜
- [ ] 整体来看,子程序的参数表是否表现出一种具有整体性且一致的接口抽象?
- [ ] 子程序参数的排列顺序是否合理?是否与类似的子程序的参数排列顺序相符?
- [ ] 接口假定是否已在文档中说明?
- [ ] 子程序的参数个数是否没超过7个?
- [ ] 是否用到了每一个输入参数?
- [ ] 是否用到了每一个输出参数?
- [ ] 子程序是否避免了吧输入参数用作工作变量?
- [ ] 如果子程序是一个函数,那么它是否在所有可能的情况下都能返回一个合法的值值?

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!