enforce()?
Jonathan M Davis
jmdavisProg at gmail.com
Wed Jun 16 10:21:32 PDT 2010
Lutger wrote:
> bearophile wrote:
>
>> I have counted about 200 usages of std.contracts.enforce() inside Phobos.
>> Can you tell me what's the purpose of enforce() in a language that has
>> built-in Contract Programming?
>
> I'd think of it this way: enforce() is part of defensive programming, and
> contracts are related to software testing.
That's probably a pretty good way of putting it. It's essentially the
difference between when you use assertions and when you use exceptions.
Assertions assert that something is _always_ true and that if it isn't, the
program is wrong, while exceptions are for exceptional circumstances (as
opposed to _never_) and indicate an error of some kind which is likely
outside the control of the program - such as something happening with the
file system, user input, or the amount of available memory.
enforce() appears to effectively be the exception equivalent to assert().
You use it when you want an exception thrown rather than when you want to
kill your program due to an error. Unfortunately, the difference between
when assertions should be used and when exceptions should be used is one
that is just subtle enough that it often trips people up, even though in
theory it should be fairly straightforward.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list