enforce()?

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Wed Jun 16 04:01:22 PDT 2010


On Wed, 16 Jun 2010 06:55:21 -0400, Steven Schveighoffer wrote:

> 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"

It also adds a file and a line number to the error message, so the 
problem is easier to track down.  Very handy. :)


> And in fact, I think there's an errnoEnforce which throws a standard
> exception with the string error from the system.

That's right, and there's even an enforceEx() which lets you specify 
which exception type to throw:

http://digitalmars.com/d/2.0/phobos/std_contracts.html#enforceEx

-Lars


More information about the Digitalmars-d mailing list