《代码大全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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

代码大全第二版读书笔记 第二部分-创建高质量的代码 七、高质量的子程序

高质量的子程序(P161) 1.创建子程序的正当理由 降低复杂度引入中间、易懂的抽象避免代码重复支持子类化隐藏顺序隐藏指针操作提高可移植性简化复杂的布尔判断改善性能确保所有的子程序都很小 2.在...

代码大全2读书笔记

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

【把经典读薄】《代码大全2》读书笔记之一 使用变量的一般事项

代码大全第二版 第十章 使用变量的一般事项 读书笔记 General Issues in Using Variable   把第十章作为开篇重读《代码大全》,并做好详细的读书笔记,希望它能给我全新的收...

《代码大全2》读书笔记

软件的复杂性来自本质性和偶然性没有人的大脑装得下一个现代的计算机程序,所以必须把程序组织起来,一次只关注一小部分。信息隐藏要隐藏的是复杂度和变化源concept blockbusting有一些设计的习...

《代码大全2》读书笔记

这本书的核心思想是: 管理软件项目的本质是管理复杂性。 代码承载的是人与人之间的交流。 第一部分 打好基础第2章 隐喻重要的研发成果常常产自类比(analogy)。通过把你不太理解的东西和一些你较为理...

《代码大全》读书笔记——重构

重构         首先说一下重构的概念,重构是一个过程,是在不改变代码外在行为的前提下,对代码进行修改,以改进程序的内部结构,达到提高软件的质量和性能,使程序的设计和架构更加合理,提高软件的可扩展...

读书笔记——代码大全——变量名的力量

1、长度 2、命名方法

读《代码大全2》笔记:高质量的子程序

第七章,高质量的子程序 前言 子程序是为实现一个特定的目的而编写的一个可被调用的方法或过程。 7.1 创建子程序的正当的理由 1、  降低复杂度。当内部循环或内部嵌套层次很深的时候,就要考虑从...

读书笔记:机器学习实战(2)——章3的决策树代码和个人理解与注释

首先是对于决策树的个人理解: 通过寻找最大信息增益(或最小信息熵)的分类特征,从部分已知类别的数据中提取分类规则的一种分类方法。 信息熵: 其中,log底数为2,额,好吧,图片我从百度截的。...

读书笔记:机器学习实战(1)——章2的knn代码和个人改进与注释

最近在学习《机器学习实战》一书,受益匪浅,之前还看过本书《机器学习系统设计》也很不错,个人觉得前者更注重算法学习和白盒代码优化(原理理解),而后者更注重skit-learn 等工具包的黑盒使用,更重要...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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