【发布时间】:2008-09-22 19:57:57
【问题描述】:
当通过契约编程一个函数或方法时,首先检查其先决条件是否得到满足,然后再开始履行其职责,对吧?进行这些检查的两种最突出的方法是assert 和exception。
- 断言仅在调试模式下失败。确保(单元)测试所有单独的合同先决条件以查看它们是否真的失败是至关重要的。
- 异常在调试和发布模式下失败。这样做的好处是测试的调试行为与发布行为相同,但会导致运行时性能损失。
你觉得哪个更好?
查看相关问题here
【问题讨论】:
-
按合同设计背后的全部要点是,您不需要(并且可以说不应该)在运行时验证先决条件。您在将输入传递到带有前提条件的方法之前验证输入,这就是您尊重合同的您的结束的方式。如果输入无效或违反了您的合同,程序通常会在其正常的操作过程中失败(您想要的)。
-
好问题,但我认为你真的应该改变接受的答案(投票也显示)!
-
永远以后,我知道,但是这个问题真的应该有 c++ 标签吗?我一直在寻找这个答案,以在另一种语言(Delpih)中使用,我无法想象任何具有不遵循相同规则的异常和断言的语言。 (仍在学习 Stack Overflow 指南。)
-
in this response 给出的非常简洁的响应:“换句话说,异常处理应用程序的健壮性,而断言处理其正确性。”
标签: exception assert design-by-contract