Contracts + Assert

Ary Borenszweig ary at esperanto.org.ar
Tue Oct 30 20:22:48 PDT 2007


Mike Linford escribió:
> I'm a bit confused about why it seems to be advocated that only assert()'s be used in contracts. Why is it that more specific exceptions aren't thrown instead? Wouldn't this make debugging easier?

Contracts are a way to ensure that the program is working as expected, 
and it is used as expected.

For example, if an assert in an "in { }" section fails, that means the 
some wrong parameter was passed to the function. It was a programmer's 
error: either she mistyped something, or she don't understand it's 
usage. If the "out { }" fails, the function's logic is wrong (or the 
"out" :-P).

For an invariant, if it fails, it's a problem in the class' logic.

If I remember correctly, assertion failures do throw an AssertError 
exception, but these exceptions aren't supposed to be catched (if the 
program's logic is wrong, the only way to recover from that exception is 
by changing the program itself). In fact, contracts are removed at all 
if you compile in -release mode.


More information about the Digitalmars-d-learn mailing list