Precondition vs debug{}
Bill Baxter
dnewsgroup at billbaxter.com
Wed Oct 3 02:34:36 PDT 2007
Daniel Keep wrote:
>
> Bill Baxter wrote:
>> Is there any difference between these two methods of implementing a
>> precondition?:
>>
>> -----------------------
>> void foo(int x)
>> in {
>> // do some checking
>> }
>> body
>> {
>> ...
>> }
>> -----------------------
>>
>> and this:
>>
>> -----------------------
>> void foo(int x)
>> {
>> debug {
>> // do some checking
>> }
>> ...
>> }
>> -----------------------
>
> I think the primary difference is that debug sections are only compiled
> in if you throw the -debug switch, whereas contracts are *omitted* if
> you throw the -release switch.
>
>> And if "some checking" is just an assert() or two is there any
>> difference between the 'in' precondition version and just plain
>>
>> -----------------------
>> void foo(int x)
>> {
>> assert(something, "something's not right");
>> ...
>> }
>> -----------------------
>
> AFAIK, there isn't. Well, unless your assert is "assert(false)" which
> never gets thrown out, unless it's in the 'in' contract and you throw
> -release.
>
>> Just curious. Typing 'in' and 'body' just doesn't come naturally to me.
>> But I've seen plenty of D code with an in{}body{} pair where the in{}
>> only contains one assert(), so I was wondering if there was some
>> advantage to the extra verbiage that I was missing out on.
>>
>> --bb
>
> Code documentation, perhaps? I like it because it provides a nice
> separation between contract assertions and the actual implementation.
>
> -- Daniel
Thanks. Your answers sum it up very nicely.
--bb
More information about the Digitalmars-d-learn
mailing list