《代码大全》笔记 08 - 防御式编程

豆瓣:https://book.douban.com/subject/1477390/

《Code Complete》2d ed,CC2

  • 在防御式驾驶中要建立这样一种思维,那就是你永远也不能确定另一位司机将要做什么。你要承担起保护自己的责任,哪怕是其他司机犯的错误。

保护程序免遭非法输入数据的破坏

  • 要做到“垃圾进,什么都不出”、“垃圾进来,出去是错误提示”或“不许垃圾进来”。

断言

  • 用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况。
  • 避免把需要执行的代码放到断言中。

  • 用断言来注解并验证前条件和后条件。确保调用子程序前的条件和调用后的结果。

  • 断言在发布的产品中关闭,必要时在断言后补充错误处理。

错误处理技术

  • 返回中立值。默认的异常结果。
  • 换用下一个正确的数据。

  • 返回与前次相同的结果。

  • 换用最接近的合法值。

  • 记录异常到日志。返回自定义错误码。

  • 调用统一的错误处理子程序。

  • 关闭程序。

异常

  • 异常是把代码中的错误或异常事件传递给调用方的一种特殊手段。
  • 异常用于报告发生了不可忽略的错误。

  • 在真正例外的情况抛出异常,能预期能处理的当场处理完毕。

  • 不能用异常来推卸责任。

  • 避免在构造和析构函数中向上层抛出异常。

  • 抛出的异常注意其抽象层次与当前子程序一致。

隔离程序,使之包容由错误造成的损害

  • 加入中间处理层,清洗外部进入的异常数据。内部就可以从容使用断言和异常机制。

辅助调试的代码

  • 开发期间牺牲一些速度和对资源的使用,换取可以让开发更顺畅的内置工具。
  • 进攻式编程(Offensive Programming)。专门应用于开发阶段,加速暴露错误的发生,促进处理解决。

核对表

2020-01-01 - 廖杰良

发布了99 篇原创文章 · 获赞 64 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章