高质量的子程序
简介
- 什么是子程序?
子程序是为实现一个特定的目的而编写的一个可被调用的方法(method)或过程(procedure)。
创建子程序的正当理由
- 降低复杂度
使用子程序来隐藏一些信息,这样你就不必再去考虑这些信息了。
当条件判断、内部循环的嵌套层次很深时,就意味着要使用子程序了!将嵌套的部分提取出来,写一个子程序,降低复杂度。 - 用子程序的名字说明代码
把一段代码放入一个命名恰当的子程序内,是说明这段代码用意最好的方法之一。
def get_hash(msg):
md5 = hashlib.md5()
md5.update(msg.encode('utf8'))
return md5.hexdigest()
password = 12345
hash_password = get_hash(password) # 可读性增加
- 避免代码重复
子程序中也可能有相同的代码。
解决一:把相同的代码写一个类,然后让子程序继承。有差异的代码就用派生方法去添加。
解决二:将相同的代码放入函数,然后调用这个函数。 - 隐藏顺序
把处理事件的顺序隐藏起来是一个好主意。比如,如果一个程序通常都是先从用户那里获取输入,然后再从一个文件中读取辅助数据。那么这两个操作的子程序,都不应该依赖另外一个子程序是否已经执行。
可以将这两个子程序放到一个子程序中封装起来,将执行顺序隐藏起来,这样比让这些信息在系统到处散布要好的多。 - 隐藏指针操作
指针操作的可读性通常都很差,而且容易出错。 - 提高可移植性
可以用子程序来隔离程序中不可移植的部分,从而明确识别和隔离未来的移植工作。 - 简化复杂的布尔判断
- 改善性能
- 不一定非要确保子程序都很小
似乎过于简单而没必要写成子程序的操作
- 小的子程序有许多优点
比如关于一些计算的代码,这些代码通常几行就可以解决。但是建议还是写成子程序。因为可能会在很多地方用,而且计算公式也有扩展的可能性。
在子程序层上设计
内聚性
内聚性:对于子程序而言,内聚性是指子程序中各种操作之间联系的紧密程度。
一个子程序中各种操作之间的练习有多强?
我们的目标是让每一个子程序,只把一件事做好,不做其他事情!
- 功能的内聚性
即一个子程序只执行一项操作。 - 顺序上的内聚性
子程序内包含需要按特定顺序执行的操作,这些步骤需要共享数据,而且只有在全部执行完毕后才完成了一项完整的功能。