Contract programming syntax
Bill Baxter
wbaxter at gmail.com
Wed Apr 8 11:12:47 PDT 2009
More agreement here.
--bb
On Thu, Apr 9, 2009 at 2:41 AM, Nick Sabalausky <a at a.a> wrote:
> "bearophile" <bearophileHUGS at lycos.com> wrote in message
> news:gridbr$mv4$1 at digitalmars.com...
>>I like contract programming, it helps me avoid bugs. This is an example
>>from the docs:
>>
>> long squareRoot(long x)
>> in {
>> assert(x >= 0);
>> }
>>
>> out (result) {
>> assert((result * result) <= x && (result+1) * (result+1) >= x);
>> }
>>
>> body {
>> return cast(long)std.math.sqrt(cast(real)x);
>> }
>>
>>
>> But isn't a syntax like the following better? To me it looks more logic,
>> because in{} and out(){} are part of the function, and there's no need of
>> a special syntax for the body (and the 'body' keyword):
>>
>> long squareRoot(long x) {
>> in {
>> assert(x >= 0);
>> }
>>
>> out (result) {
>> assert((result * result) <= x && (result+1) * (result+1) >= x);
>> }
>>
>> return cast(long)std.math.sqrt(cast(real)x);
>> }
>>
>> Bye,
>> bearophile
>
> This is one of those things that has always kinda bugged me about the
> language, but I never really considered a big enough deal to bring up. But
> now that it has been brought up: Yes, I agree completely.
>
>
>
More information about the Digitalmars-d
mailing list