代码大全2笔记-第8章-防御式编程


  什么是“防御式编程”,举个例子来说明,如果让你做个瓶子,要考虑哪些问题?瓶子装什么该是首先要考虑的,水、油还是硫酸?(考虑

各种输入,哪些非法输入的破坏),瓶子在什么环境下使用?(检查所有来源于外部的数据的值),瓶子被设计用来装水的,但有人要装硫酸

的时候怎么办?(应该在瓶子上贴个Warnning吧,程序在非法输入时有时也要有warnning)。
  对于好的程序来说,不应该是“垃圾进,垃圾出”,而应该做到“垃圾进,什么都不出”、“进来垃圾,出去的是出错提示”或“不许垃圾

进来”。处理“进来垃圾”的情况有下列三种方法:检查所有来源于外部的数据的值(如从文件读取数据时)、检查函数的所有输入参数的值

、决定如何处理错误的输入数据。
  使用断言或错误处理,没有太大区别,不过从两者之间的语言来说,断言用来处理绝不应该发生的状况,错误出来来处理预期会发生的情况

。如一个计算除法的函数,分母为0就应该用断言处理。书中举了下列用断言处理的情形:指针非空、输入或输出参数取值处于预期范围内。注

意,不要把要执行的代码放到断言中(自定义的断言机制可能在发布时不被编译,这段代码可能会被漏过,所以在断言中应该用变量来取代函

数),当然,要确保健壮性,可以在断言后再进行错误处理。
  错误处理有下面这些:返回中立值(如出错时返回默认值)、跳过该出错数据而使用下一个正确数据(如读链表的下一个节点)、换用最接

近的合法值、返回一个错误码、记录警告信息、关闭程序等。
  既然提到了“防御式编程”,就有必要提一下“进攻式编程”的概念:防御式编程,是在遇到错误后进行防御,避免受到错误侵害,而进攻式

编程正好相反,在开发阶段,尽量暴露错误,如这些情况:确保断言语句使程序终止运行、完全填充分配到的所有内存、确保每个case的

default分支都能产生严重错误。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值