[REBOL] Re: [functions] Re: A question of function interface design
From: greggirwin::mindspring::com at: 19-Jan-2005 11:21
Peter, Michael, et al
PW> I have started to question whether it is best to use Rebol's
PW> automatic type checking of parameters or not when designing
I do different things in different contexts. With other languages, I
never exercised the same variety of styles that I do with REBOL, maybe
because they didn't allow it. With REBOL, I can tailor the style to
the need very easily, even in the same script. This may lead to a view
that the code is inconsistent, but it can also work to make it clear
what kind of code you're writing.
For example, a function with no help string, no type checking, and no
comments is probably not meant for re-use. A function that has types
defined for some parameters, but not all, jumps out at me as "mostly
designed". If it were "fully designed", it would have any-type!
listed for those params. With no type set for only certain params,
it's like I'm saying "I'm not sure yet what I may want to allow here".
Being able to specify types and have REBOL check them for us is a
wonderful thing, but every script may not need that level of control
for every function. Use it when appropriate.
I often define local functions, and keeping them short and sweet
really helps. I'm only going to be calling them from the next ten
lines of code, so there is strong context to assist in using them
MB> I thought Rebol is strongly typed (but not statically) ... like a value
MB> has always an assigned type.
Correct. Values have types, variables don't.
MB> Are there any comments regarding DBC being (un)useful for Rebol ?
I think it could be useful in certain applications. Again, REBOL is
very flexible and there will be times when tools like DbC *will* be
helpful; for most little REBOL scripts it would be overkill.
I've tinkered a bit with Eiffel, and built my own DbC system for VB,
which I used a lot and did help me to catch things sometimes. I think
it can work well in an OO context, where you may be integrating a lot
of little pieces you didn't write, and you're maybe not sure how they
behave. In REBOL I find I write more general predicate functions,
though I did play with Maarten's DbC stuff a bit. How would DbC work
with something like PARSE though? It's really only applicable at the
Something else to consider is how it would work when you're dealing
with code as data and such. One of the great things about REBOL is
that we can try these things out (AOP is another hot topic) and see
where they're applicable. e.g. you may have some critical parts of an
app that would really benefit from DbC, so you could write a little
dialect for just that purpose, or use Maarten's just for those pieces.
With Eiffel, and I found with VB once I wrote my framework for it, you
tend to use DbC very heavily, whether it's really necessary or not.