第二部分 防御性编程
本文为《代码大全2》的读书笔记,版权归代码大全所有。^_^
本文基址:http://blog.csdn.net/cugxueyu/archive/2007/12/10/1926751.aspx
防御式编程的全部重点就在于防御那些你未曾预料到的错误。
防御式编程的主要思想:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生错误数据。更一般地说,其核心想法是要承认程序都会有问题,都需要被修改,聪明的程序员应该根据这一点来编程序。
一、保护程序免遭非法输入数据的破坏
对已形成产品的软件而言:不管进来的数据如何,都不应该产程垃圾数据。(必要的错误提示)
通常有三种方法来处理进来的垃圾数据:
1、检查所有来源于外部的数据的值
当从文件、用户、网络或其他外部接口中获取数据时,应检查所获得的数据值,以确保它在允许的范围内。
2、检查子程序所有输入参数的值
数据来源于其他子程序,而不是外部接口。
3、决定如何处理错误的输入数据
一旦检测到非法数据,就应该处理它。
注:防范看似微小的错误,收获可能远远超出你的想象。
二、断言(Assertions)
断言定义:指在开发期间使用的,让程序在运行时进行自检的代码(通常可以是子程序或宏)。(对大型的复杂程序或可靠性要求极高的程序来说尤其重要)
Java断言:两个参数—>assert(“bool表达式”,“当判断条件为false时的错误信息”)
断言检查如下这类假定:
1、 输入参数和输出参数的取值处于预期的范围内。
2、 子程序开始(或结束)执行时,文件或流是处于打开(或关闭)的状态。
3、 子程序开始(或结束)执行时,文件或流的读写位置处于开头(或结尾)处。
4、 文件或流已用只读、只写或可读可写方式打开。
5、 仅用于输入的变量的值,没有被子程序所修改。
6、 指针非空。
7、 传入子程序的数组或其他容器至少能容纳X个数据元素。
8、 表已经初始化,存储着真实的数据。