第八章 防御式编程
——防御式编程的主要思想是:子程序应该不因传入数据错误而被破坏,哪怕是由其他子程序产生的错误数据。
8.1 保护程序免遭非法输入数据的破坏
做到“垃圾进,什么都不出”、“进来垃圾,出去是出错提示” 或 “不许垃圾进来”,下面是三种处理进来垃圾的情况:
- 检查所有来源于外部的数据的值:一定要检查获取数据值的合理性,如检查数值范围,字符串检查长度等等;
- 检查子程序所有输入参数的值:同1一样,也要检查子程序中输入参数的合理性;
- 决定如何处理错误的输入数据:在8.3中会详细说明;
- 使用迭代是设计、编码钱先写伪代码、写代码前先写测试用例、低层设计检查等活动,有助于防止引入错误
8.2 断言
断言是指在开发期间使用的、让程序在运行时进行自检的代码(通常是一个子程序或宏)。
- 个人理解,断言就是对特定对象的调试代码
- 断言可以用于在代码中说明各种假定,澄清各种不希望的情形
- 断言主要是用于开发和维护阶段
建立自己的断言机制
使用断言的指导建议
- 用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况:错误处理通常是用来检查有害的输入数据,而断言是用来检查代码中的bug,也可以把断言理解为可执行的注释;
- 避免把需要执行的代码放到断言中:断言只是帮助调试的可执行注释,在成熟的产品代码中是不会编译断言的!!!!
- 用断言来注解并验证前条件和后条件:前条件是子程序或类的调用方代码在调用子程序或实例化对象之前要确保为真的属性,前条件是调用方代码对其所调用的代码要承担的义务;后条件是子程序或类在执行结束后要确保为真的属性,后置条件是子程序或类对调用方代码所承担的责任;简单理解就是,前条件是在进入之前的检查,后条件是在出来之前的检查(至于是进入出来什么,随便你啦!!!);
- 对于高健壮的代码,应该先使用断言再处理错误