《代码大全》笔记 08 - 防御式编程
豆瓣:https://book.douban.com/subject/1477390/
《Code Complete》2d ed,CC2
-
在防御式驾驶中要建立这样一种思维,那就是你永远也不能确定另一位司机将要做什么。你要承担起保护自己的责任,哪怕是其他司机犯的错误。
保护程序免遭非法输入数据的破坏
- 要做到“垃圾进,什么都不出”、“垃圾进来,出去是错误提示”或“不许垃圾进来”。
断言
- 用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况。
-
避免把需要执行的代码放到断言中。
-
用断言来注解并验证前条件和后条件。确保调用子程序前的条件和调用后的结果。
-
断言在发布的产品中关闭,必要时在断言后补充错误处理。
错误处理技术
- 返回中立值。默认的异常结果。
-
换用下一个正确的数据。
-
返回与前次相同的结果。
-
换用最接近的合法值。
-
记录异常到日志。返回自定义错误码。
-
调用统一的错误处理子程序。
-
关闭程序。
异常
- 异常是把代码中的错误或异常事件传递给调用方的一种特殊手段。
-
异常用于报告发生了不可忽略的错误。
-
在真正例外的情况抛出异常,能预期能处理的当场处理完毕。
-
不能用异常来推卸责任。
-
避免在构造和析构函数中向上层抛出异常。
-
抛出的异常注意其抽象层次与当前子程序一致。
隔离程序,使之包容由错误造成的损害
- 加入中间处理层,清洗外部进入的异常数据。内部就可以从容使用断言和异常机制。
辅助调试的代码
- 开发期间牺牲一些速度和对资源的使用,换取可以让开发更顺畅的内置工具。
-
进攻式编程(Offensive Programming)。专门应用于开发阶段,加速暴露错误的发生,促进处理解决。
2020-01-01 - 廖杰良