断言与异常

契约式编程,检查前条件使用ASSERT(类似if?),检查后条件使用异常。

断言处理不应该在程序中出现的情况,出现了程序终止、及时发现解决错误;

异常处理程序中可能出现的错误情况,出现了需要做处理

 

以一个函数为例,它要求在开始执行的时候满足一系列条件,这些条件被称为“前条件”或者“先验条件”,比如,参数不为空,某全局变量应该为1,等等。不满足前条件,是不能调用此函数的,如果出现了前条件不满足仍然调用了此函数,可以认为这是一个设计错误。

 

这个函数执行以后,也会满足一系列条件,这些条件被称为“后条件”或者“后验条件”,比如返回值满足什么关系,某全局变量设置称为什么什么,等等。这应该是函数执行的结果,在前条件满足的情况下,后条件如果没有满足是一种不正常的情况,那么使用异常来处理。

契约式编程中前条件不满足是程序错误,需要修改,这也与一般理解中出现ASSERT是程序错误符合;后条件不满足往往也是一些意外原因,也和一般理解中出现异常是意外情况符合。但是契约式编程还有一个问题是“不变式”,不变式指在函数执行之前和之后都不发生变化,我理解,在函数执行以前可以用ASSERT对不变式进行检查,在执行以后如果发现不变式发生了变化,那么应该抛出异常。

 

 

作者:晨池
链接:https://www.zhihu.com/question/24461924/answer/27928436

 

 

ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。http://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html

 

1.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值

http://blog.csdn.net/nancy_m/article/details/7971386

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值