《Code Complete》ch.7 高质量的子程序
WHAT?
子程序(routines)是为实现一个特定目的而编写的可被调用的方法或过程。在C++中是函数(function),在Java中是方法(method),在VB中是函数过程(function procedure)或子过程(sub procedure)。
WHY?
- 降低复杂度
- 引入中间、易懂的抽象
- 避免代码重复
- 支持继承、重写
- 隐藏实现细节
- 提高可移植性
- 改善性能(对明确的子程序进行优化)
HOW?
- 内聚性(cohesion):是指子程序中各种操作之间联系的紧密程度
- 编程的目标是让每一个子程序只完成一件事情
- 内聚性的几个层次,由高到低排列
- 功能内聚(functional cohesion):最强、最好的内聚,只完成一件事情
- 顺序内聚(sequential cohesion):子程序做了至少两件事情,且这两件事情有分先后顺序
- 通信内聚(communicational cohesion):子程序做了至少两件事情,它们使用了同样的数据
- 临时内聚(temporal cohesion):将一系列操作放到一起执行,如startUp()、shutDown(),应该由这些程序去调动其它子程序,而不是把实现都写在这些程序中
- bad:过程内聚(procedural cohesion):子程序中操作必须按照特定顺序进行
- bad:逻辑内聚(logical cohesion):依靠输入参数的标识位来决定执行哪一段逻辑
- bad:巧合内聚(coincidental cohesion):子程序中各个操作没有关联,一团乱麻
- 好的子程序名字
- 描述子程序所做的所有事情
- 避免使用无意义的、含混不清的动词
- bad:handleCalculation
- 不要仅通过数字形成不同的子程序名字
- bad:test1、test2
- 函数命名:对返回值有所描述
- 过程命名:动宾短语
- 如果子程序的名字很糟糕,但却正确滴描述了子程序的功能——到了考虑修改子程序的时候了
- 子程序不要超过200行
- 参数排列
- (输入、修改、输出),把状态或者出错变量放在最后
- 多个相似的子程序,使用相同的参数顺序
- 不要把参数用作工作变量
- 参数个数在7个以内
- 想清楚子程序需要的参数是一整个对象,还是仅仅为对象中几个独立的field
《Code Complete》ch.7 高质量的子程序的更多相关文章
- Code Complete
一.<代码大全>优先阅读参考顺序: 自学编程人:第07章 高质量的子程序 低年级学生:第11章 变量命名的力量 高年级学生:第08章 防御式编程 初级程序员:第18章 表驱动法 高级程序员 ...
- 重读 code complete 说说代码质量
重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...
- 《Code Complete》ch.16 控制循环
WHAT? 反复执行的代码片段(你是第一天学编程吗) WHY? 知道如何使用及何时使用每一种循环是创建高质量软件的一个决定性因素 HOW? 检测位于循环开始/循环结尾 带退出的循环 进入循环 只从一个 ...
- 高质量C++/C编程指南(林锐)
推荐-高质量C++/C编程指南(林锐) 版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐 2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐 20 ...
- 高质量C++[转]
高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日 版 本 ...
- 高质量C++/C编程指南
http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520634042 高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文 ...
- code complete part1
最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...
- 编写高质量JS代码的68个有效方法(八)
[20141227]编写高质量JS代码的68个有效方法(八) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...
随机推荐
- android操作sdcard中的多媒体文件(一)——音乐列表的制作
android操作sdcard中的多媒体文件(一)——音乐列表的制作 原文地址 最近做了一个android音乐播放器,个人感觉最难的就是“后台播放”以及有关“播放列表”的部分,但是总算是找到了实现的方 ...
- openstack(liberty):部署实验平台(三,简单版本软件安装 之cinder,swift)
今天这里追加存储相关的部署,主要是Block和Object,为了看到效果,简单的部署在单节点上,即Block一个节点,Object对应一个节点. 读者可能会觉得我这个图和之前的两个post有点点不同, ...
- jQuery validate在没有校验通过的情况下拒绝提交
下面通过一个简单的例子说明,这个问题,可能是很多人遇到的,验证不通过的时候,依然提交了表单. HTML <form class="survey" id="surve ...
- 【shell】read
read:read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说).得到输入后,read命令将数据放入一个标准变量中. [参数][变量] 注意:变量要在参数的后面 主要参数: -t ...
- PHP 动态执行
PHP 动态执行 在页面上直接输入代码,点击执行,返回执行结果 方法很简单,主要使用了 $newfunc = create_function('', $code); 函数来实现. 代码如下: < ...
- 一个快速、完善的Android开发框架整合实践(QuickAndroid)
https://github.com/alafighting/QuickAndroid QuickAndroid 一个快速.完善的Android开发框架整合实践 QA项目简介 本框架QuickAndr ...
- ARM地址映射
转自:http://blog.csdn.net/a3163504123/article/details/10958229 重映射之后,一般原来的地址依然有效.也就是说,可能两个地址,对应一个存储单元. ...
- SVN:通过Client端打tag
教你如何使用svnClient打tag~给公司人用的! 1.进入代码主目录 2.右击空白处“TortoiseSVN”—->“Branch/tag” 3.点地址栏右侧的 (选择tags存放目录) ...
- Segment fault及LINUX core dump详解
源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the work ...
- Spark on Yarn年度知识整理
大数据体系结构: Spark简介 Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如f ...