Good Contract programming idiom?

Brad Roberts braddr at bellevue.puremagic.com
Wed Mar 3 14:09:59 PST 2010


On Wed, 3 Mar 2010, Norbert Nemec wrote:

> The edited Wikipedia text for D is so far correct, even though the whole page
> is not quite as precise as it could be. The theoretical basis and the
> practical application are somewhat mixed. Fixing that, however, would be a
> major task.
> 
> I think the fundamental distinction between three concepts is essential in
> understanding the issue:
> 
> * exceptions - handling of run-time conditions caused by user, file, network
> or any other kind of input. Hitting an exception is not a bug but a regular
> function of the code.
> 
> * contracts - well designed parts of interfaces. Best understood literally as
> "contract", defining who is responsible for a bug. The possibility to check a
> contract at runtime is actually a secondary function.
> 
> * assertions - best understood as "comments" that can be checked by the
> compiler. Sprinkle them freely wherever you find some non-trivial relation
> between variables of the code.
> 
> I guess this whole issue simply is something that has to be discussed more
> frequently to make people aware of it.
> 
> Greetings,
> Norbert

There's an important point that's been left out of this conversation so 
far (unless I missed it):

Asserts in the body of a method have no impact on overridden 
implementations in subclasses, but in/out contracts do.  So there's a 
distinct value in using in/out for non-final methods.

Later,
Brad



More information about the Digitalmars-d mailing list