Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[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