【发布时间】:2008-09-11 09:53:28
【问题描述】:
this question 中的代码让我思考
assert(value>0); //Precondition
if (value>0)
{
//Doit
}
我从不写 if 语句。断言就足够了/你可以做的。 “早崩溃,经常崩溃”
CodeComplete 状态:
- 断言语句使应用程序正确
- if 测试使应用程序健壮
我不认为您通过更正无效输入值或跳过代码使应用程序更健壮:
assert(value >= 0 ); //Precondition
assert(value <= 90); //Precondition
if(value < 0) //Just in case
value = 0;
if (value > 90) //Just in case
value = 90;
//Doit
这些更正是基于您对外部世界所做的假设。 只有调用者知道你的函数的“有效输入值”是什么,他必须在调用你的函数之前检查它的有效性。
套用CodeComplete: “当我们不完全依赖断言时,现实世界的程序变得太混乱了。”
问题:我是不是错了,固执,愚蠢,太不防备......
【问题讨论】:
-
我同意你的看法。断言的全部意义在于在测试期间执行完整性检查,这在生产中执行起来过于昂贵。它们的功能与异常有着根本的不同。