enforce()?
Steven Schveighoffer
schveiguy at yahoo.com
Wed Jun 16 03:55:21 PDT 2010
On Wed, 16 Jun 2010 05:28:46 -0400, Ary Borenszweig <ary at esperanto.org.ar>
wrote:
> On 06/16/2010 04:15 PM, Walter Bright wrote:
>> Ali Çehreli 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 can see two benefits:
>>
>> The difference is not based on those 3 points, but on what Andrei wrote
>> here. Contracts and error checking are completely distinct activities
>> and should not be conflated.
>
> Could you please explain them? There are many people here that don't
> understand the difference between these two concepts (including me). So
> maybe we are too dumb, maybe those concepts are not generally known or
> maybe the explanation is not very well clear in the documentation.
I think of enforce as a convenient way translating an error in an
expectation to an exception in a single expression.
For example, take some system call that returns -1 on error, you could do
this:
if(result < 0)
throw new Exception("oops!");
or you could do this:
enforce(result >= 0, "oops!");
Think of enforce as "throw if"
And in fact, I think there's an errnoEnforce which throws a standard
exception with the string error from the system.
I'd say the difference between enforce and assert is exactly what Andrei
said -- enforce is meant to catch errors that can occur during normal
operation. Assert is meant to catch errors that are not expected during
normal operation. Assert's more like a sanity check. Also, assert is
turned off in release mode, enforce is left on.
-Steve
More information about the Digitalmars-d
mailing list