读书笔记:《代码大全第2版》 06.创建高质量的代码之伪代码编程
伪代码编程过程
创建类和子程序通常都是一个迭代的过程。在创建子程序的过程中获得的认识常常会反过来影响类的设计。
1、类和子程序的创建过程
类的创建过程
子程序的创建过程
2、伪代码
如何编写一段伪代码:
- 用类似英语的语句来精确描述特定的操作
- 避免使用目标语言中的语法元素
- 用伪代码去描述解决问题的方法意图,而不是去写如何在目标语言中实现这个方法
- 在一个足够低的层次上编写伪代码,以便可以近乎自动地从它生成代码
不好的伪代码示例:
好的伪代码示例:
一份好的伪代码几乎可以直接照着它生成代码,之后伪代码还可以作为代码中的注释。
3、通过伪代码创建子程序
3.1 设计子程序
- 检查先决条件
- 检查该子程序在设计上是否是真正必需的,是否能够与整体设计相匹配。
- 定义子程序要解决的问题
- 子程序将要隐藏的信息(示例隐藏了两项事实:错误信息的文本和当前的处理方式(交互式界面或命令行))
- 传给子程序的输入(示例中的给该子程序的输入数据是一个错误码)
- 从子程序得到的输出(示例中存在两种输出:错误信息或状态值)
- 在调用程序之前确保有关的前条件成立(比如输入数据的取值位于特定范围之内、初始化流、文件打开等,实例中没有任何需要保证的前条件)
- 在子程序将控制权交回调用方程序之前,确保其后条件的成立(如输出数据的取值位于特定范围之内。示例中的后条件是保证状态值或为Success,或为Failure)
- 为子程序取个清晰明了的好名字
- 在标准库中搜寻可用的功能(学会复用,你需要实现的功能可能已经有人帮你实现了)
- 考虑错误处理
- 考虑效率问题
- 对大多数系统而言程序的效率并不是十分紧要。通常只需要关注子程序的接口是否经过很好的抽象,代码是否易读即可
- 少数系统的性能是非常重要的。考虑是用空间换时间,还是时间换空间
- 最主要的优化还是在于完善高层的设计,而不是完善某个子程序。先宏观后微观
- 研究算法和数据类型(有些答案可能就在某本算法书中)
- 编写伪代码
- 考虑数据
- 检查伪代码(确认很容易理解子程序在做什么以及它是怎么做的)
- 在伪代码中尝试更多的想法(用伪代码反复描述这个子程序直到用伪代码写出的句子甚至可直接编码)
3.2 编写子程序的代码
- 写出子程序的声明
- 将伪代码转变为高层次的注释
- 在每条注释下面填充代码
- 检查代码是否需要进一步分解
- 如果一段伪代码形成的代码量超出了预期,可以将这些代码重构为独立的子程序来调用或者先将该伪代码分解为更多行的伪代码
3.3 检查代码
- 在脑海里检查程序中的错误
- 编译子程序
- 在调试器中逐行执行代码
- 测试代码
- 消除程序中的错误(如果错误太多就重新思考后重写吧)
3.4 收尾工作
- 检查子程序的接口参数(第7节 "方法参数"小节)
- 检查整体的设计质量
- 是否功能内聚
- 子程序之间是否松耦合
- 子程序是否采用防御式设计
- 检查子程序中的变量
- 检查子程序中的语句和逻辑
- 检查子程序的布局
- 检查子程序的文档
- 除去冗余的代码注释