《代码大全2》读书笔记——子程序

原创 2006年05月22日 22:38:00
阅读完第7高质量的子程序,并对其进行了归纳。
1、子程序是为实现一个特定的目的而编写的一个可被调用的方法(method)或过程(procedure)
子程序应该使程序变得更加易读,更易于理解,比任何编程语言的任何功能特性都更容易。
子程序能用来节约空间和提高性能。可以将重复的代码设计成子程序,在需要的地方进行调用;也可以方便地对子程序进行修改而改善整个代码的性能。
    2、为什么要创建子程序
(1)降低复杂程度。
可以通过创建子程序来隐藏一些信息。当编写好一个子程序后,就不必再考虑子程序的工作细节了,只需直接调用它以实现所需功能。
(2)引入中间、易懂的抽象
把一段代码放入一个命名恰当的子程序内,是说明这段代码用意最好的方法之一。反之,给子程序取个好的名字,足以说明程序的用意,也使得代码更具可读性,更容易理解,也降低了代码的复杂度。
(3)避免代码重复
让相同的代码只出现一次可以节约空间;只需在一处修改,代码改变起来也更方便;只需检查一处代码,代码也更加可靠;也避免了对多处需做相同修改时会犯的错误。
(4)支持子类化
覆盖简短而规整的子程序所需新代码的数量更少,实现派生类时也会减少犯错的几率。
(5)隐藏顺序
隐藏处理事件的顺序是一个好方法。
(6)隐藏指针操作
把可读性差且容易出错的指针操作隔离在子程序内部,集中研究操作的意图。同时,如果此类操作都能在一个位置完成,代码的正确性就更有把握。若在程序中发觉有比指针更合适的数据类型,可对程序做出修改而不必担心会破坏那些原本要使用指针的代码。
(7)提高可移植性
可用子程序来隔离程序中不可移植的部分,相应地明确识别和隔离了未来的移植工作。
(8)简化复杂的布尔判断
为了理解程序的流程,没必要研究那些复杂的逻辑判断。把这些判断放入到函数中,并命名以具有描述性的名字,以提高代码的可读性。
(9)改善性能
可以只在一个地方优化代码,并且能让使用该子程序的所有代码都从中受益;也可以更方便地查出哪些代码的运行效率低下;也能让想用更高效的算法或更快速的语言来重写代码更容易。
******************************************************
(10)隔离复杂度
大型的或相当复杂的东西会容易引发错误,如果所发生的错误在一个子程序中,找到它会较容易,也容易修改错误而不影响其它的代码。若原有的算法是在子程序中的话,如果发觉有更好、更简单或更可靠的算法,可以很容易地进行替换。
(11)隐藏实现细节
只关注子程序的功能,而不管它是如何工作的。因为如何工作已在设计子程序时进行过考虑。
(12)限制变动的影响范围
把容易变动的部分写成子程序,这样应很容易修改。
(13)隐藏全局数据
通过访问器子程序来操控全局数据,可以改变数据结构而无须修改程序本身,可以监视对这些数据的访问。
(14)形成中央控制点
在一处控制一项任务是一个好方法。
(15)促成可重用的代码
将有单独功能且可能被其它部分调用的代码单独分离出来。
(16)达到特定的重构目的
能更好的实现目标。
******************************************************
3、什么时候创建子程序
[情形一] 当内部循环或条件判断的嵌套层次很深时,则需要从子程序中提取出新的子程序了。把嵌套的部分提取出来形成一个独立的子程序,可以降低外围子程序的复杂度。
[情形二] 当程序中有复杂的布尔判断时,将其放入单独的函数中。
[情形三] 不能表面上看起来过于简单(只有两三行代码)而不想编写子程序。一个很好而又小巧的子程序会很有用。它们能够提高可读性;也会使得当简单的操作变得更复杂时更易修改。
[情形四] 如果程序的某部分容易变动,则可将它设计成子程序。如硬件依赖性、输入/输出、复杂数据类型等。
 
……(可以继续总结归纳)
4、子程序设计原则
(1)对子程序而言,内聚性是指子程序中各种操作之间联系的紧密程度。设计的目标是让每一个子程序只把一件事做好,不再做任何其他事情,以得到更高的可靠性。因此,应该让子程序尽可能地内聚,即让一个子程序仅执行一项操作,实现功能的内聚性。
(2)给子程序命名一个好的名字,好的子程序名能清晰地描述子程序的功能和作用。下面是有效命名的原则。
描述子程序所做的所有事情 子程序的名字应该描述其所有的输出结果和附属功能。
避免使用无意义的、模糊或表述不清的动词
不要仅通过数字来形成不同的子程序名
根据需要确定子程序名字的长度 尽可能含义清晰。
给函数命名时要对返回值有所描述
给过程起名时使用语气强烈的动词加宾语的形式
准确使用对仗词 命名时遵守对仗词的命名规则有助于保持一致性,从而也提高可读性,如first/last。
为常用操作确立命名规则
(3)考虑子程序的内聚性、嵌套的层次、变量的数量、决策点的数量、解释子程序所需的注释数量、以及其他一些跟复杂度相关的考虑事项等来决定子程序的长度。通常,大部分子程序都非常短小,但复杂的算法总会导致更长的子程序,在这种情况下,可允许子程序的长度有序地增长到100200行。最好,将子程序的长度控制在200行以内。
(4)如何使用子程序参数。
按照输入—修改—输出的顺序排列参数 先列出仅作为输入用途的参数,然后是既作为输入又作为输出用途的参数,最后才是仅作为输出用途的参数。这种排列方法也暗含了子程序的内部操作所发生的顺序——先是输入数据,然后修改数据,最后输出结果。
考虑自已创建in和out关键字 当然这种方式有优有缺
如果几个子程序都用了类似的一些参数,应该让这些参数的排列顺序保持一致
使用所有的参数 既然往子程序中传递了一个参数,就一定要用到这个参数。
把状态或出错变量放在最后 状态变量和那些用于指示发生错误的变量应放在参数表的最后。
不要把子程序的参数用作工作变量 应该使用局部变量。
在接口中对参数的假定加以说明 应该说明的参数有:参数是仅用于输入的、要被修改的、还是仅用于输出的;表示数量的参数的单位;状态代码和错误值的含义;所能接受的数值的范围;不该出现的特定数值。
把子程序的参数个数限制在大约7个以内
考虑对参数采用某种表示输入、修改、输出的命名规则
为子程序传递用以维持其接口抽象的变量或对象
使用具名参数 可以显式地把形式参数和实际参数对应起来,使得参数的用法更具有自我描述性,并有助于避免因为用错参数而带来的错误。
确保实际参数与形式参数相匹配
(5)如果一个子程序的主要用途就是返回由其名字所指明的返回值,那么就应该使用函数,否则就应该使用过程。
 

2006522

读《代码大全2》笔记:变量的力量

变量名的力量 11.1选择好变量名的注意事项        你可不能像给狗取名字那样给变量命名----仅仅因为它很可爱或者听上去不错。狗和狗的名字不一样,它们是不同的东西,变量和变量名就本质而言却...
  • qingflyer
  • qingflyer
  • 2012年01月09日 17:12
  • 3072

读书笔记_代码大全2第七章_高质量的子程序

创建子程序的正当理由  降低复杂度 把嵌套的部分提取出来形成一个独立的子程序,可以降低外围子程序的复杂度。  引入中间,易懂的抽象  避免代码重复    支持子类化 ...
  • qq_25601345
  • qq_25601345
  • 2017年08月20日 12:24
  • 51

《代码大全2》读书笔记

《代码大全2》读书笔记第六章 可以工作的类 抽象数据类型ADT :一组数据 和 对其的操作 类可以看成是 ADT + 继承 +多态 良好的类接口,类接口可以看成类共有子程序所构成的集合 类接口应该表...
  • zheshimingzi
  • zheshimingzi
  • 2015年11月17日 10:59
  • 471

代码大全2读书笔记

代码大全2读书笔记       作者写这本书的首要目的,就是希望缩小本行业中一般商用实践与大师级人物及专家们之间的知识差距。许多强大的编程技术在被编程领域的大众接触之前,都已在学术论文和期刊里尘封...
  • u010283694
  • u010283694
  • 2014年04月22日 21:15
  • 2174

读书笔记_代码大全2

Chapter 3: Measure Twice, Cut Once: Upstream Prerequisites. 三思而后行: 前期准备本章节很重要, 记叙了做项目的前期准备的一系列工作 * ...
  • soft53ears
  • soft53ears
  • 2011年11月20日 22:05
  • 227

高质量子程序核查表(代码大全2)

高质量子程序核查表子程序:为了实现一个特定的目的而编写的一个可被调用的方法(method)或过程(procedure)。例如C++中的函数(function)。大局事项:1.创建子程序的理由充分吗?2...
  • tujiaw
  • tujiaw
  • 2011年03月22日 20:10
  • 889

《代码大全2》读书笔记——变量篇

《代码大全》读书笔记——变量篇
  • vincent_hbl
  • vincent_hbl
  • 2016年11月26日 22:54
  • 157

代码大全2(读书笔记6)

71 、一旦你能理解软件开发中任何其他技术目标都不如管理复杂度重要时,众多设计上的考虑就都变得直截了当了。 72、高质量的设计具有很多觉的特征。如果你能实现所有的这些目标,你的设计就真的非常好了。这...
  • old_man_and_sea
  • old_man_and_sea
  • 2012年11月13日 16:06
  • 253

代码大全2(读书笔记14)

151、在与项目规模的关系方面,生产率的情况与软件质量很相似。对于小项目,影响生产率的最大因素莫过于单个程序员的技巧。随着项目规模和团队规模的增大,组织方式对生产率的影响也将随之增大。   152...
  • old_man_and_sea
  • old_man_and_sea
  • 2012年11月15日 16:30
  • 279

代码大全2(读书笔记5)

56、程序员的一部分工作是教育老板 和合作者,告诉他们软件开发过程,包括在开始编程之前进行充分准备的重要性。 60、编程语言影响程序员的思维的证据随处可见。典型的故事类似下面的样子:“我们用C++编...
  • old_man_and_sea
  • old_man_and_sea
  • 2012年11月13日 16:01
  • 265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《代码大全2》读书笔记——子程序
举报原因:
原因补充:

(最多只允许输入30个字)