[REBOL] Re: Design by contract
From: sanghabum:aol at: 21-Feb-2001 15:10
Gisle Dankel wrote:
> Here's a Design By Contract script that I hacked together yesterday.
> For those who don't know, Design By Contract is a software pattern used to
> enforce preconditions and postconditions of a function.
> <snip>
Thanks for this script. Tools for validating parameters are something sadly
lacking in Rebol as it stands today, and could do with being built into the
language. If Carl were to look at Eiffel he'd get an idea of the strength
that such inbuilt capability would bring.
As I try to write robust code, I typically find myself writing stuff like
this little function:
UpdateTuple: func [
"Add/Subtracts M from the Nth part of a tuple"
Tup [Tuple!] "Tuple to update"
Nth [Integer!] "Nth part of tuple (leftmost is 1)"
Val [Integer!] "Value to add/subtract from Tuple"
]
[
either all [(Nth > 0)
not (Nth > Length? Tup)
] ; all
[poke tup Nth ((pick tup Nth) + val)
] ;either true
[
CrashOut "UpdateTuple" "Nth is out of range"
] ; either false
]; func
I give Rebol top marks for built-in documentation and parameter type
specification. That's the first seven or so lines of the above function. But
the payload (a single line) is then embedded in another seven or so lines of
parameter checking. In Eiffel, the payload and the parameter checking would
be distinct.
(Crashout is another little function of mine, not shown, that tries to
shutdown gracefully while advising the user not to panic).
Colin