Jeff,

In his book, Refactoring : Improving the Design of
Existing Code 
http://www.bookpool.com/.x/t7itfr3lmm/sm/0201485672 ,
Martin Fowler help programmers tame their java code. I
now consider it the most important book for learning
the Java language.

Your example is excellent and I hope that we will see
more in the future. I have certainly learned alot
about REBOL by refactoring my code many times. Next
time I suspect there is a better way to do something,
I will ask this list.

Regards,

David


--- [EMAIL PROTECTED] wrote:
> 
> 
> 
>   There's a certain zen to REBOL and it takes time
> to
>   understand-- something that I am always learning. 
> 
> 
>   REBOL has a lot of what might seem like idioms,
> which really
>   are ways to do things that make life a lot easier.
>  They
>   stem from the craftsmanship in REBOL, the rather
> lengthy
>   effort that went into its design, implementation
> and polish.
>   Many problems you face in programming have a
> nicely crafted
>   solution sitting inside this little binary
> interpreter, just
>   waiting for you to discover it when you need it.
> 
>   The code that comes from REBOL should demonstrate
> that Zen
>   because we all are lucky in that we can pick
> Carl's brains
>   over the challenges we encounter.  Also, we're
> lucky because
>   we get to write REBOL code as an occupation, so we
> get to
>   find all those little crafted edges inside. I've
> always
>   hoped to pass on what little I have learned of the
> Zen of
>   REBOL to any who would walk in that path.
> 
>   Here is an example of some REBOL Zen style idioms.
> 
>   ============================================
> 
>   Consider a block of similar objects:
> 
>   block:  [make object! [name: "foo" phone:
> #222-1111 ... ] ... ]
> 
>   Now you're writing a function and you have this
> block and it
>   is really long with many of the same kinds of
> objects, but
>   you need to see if there is an object which has
> the name
>   field set to "Waldo" and you need to see if the
> waldo
>   object's phone field is set to none, If you don't
> find this
>   object you want to do somehing.  If you do find
> waldo and
>   waldo has a phone you want to call waldo,
> otherwise you want
>   to complain that he doesn't have a phone. 
> 
>   Some people might code it like this:
> 
>   find-waldo: func [block [block!] /local found
> waldo no-fone?][
>       found: false
>       foreach obj block [
>           if obj/name = "waldo" [
>               waldo: obj
>               found: true
>               no-fone?: not none? obj/phone
>           ]
>       ]
>       if not found [wheres-waldo?]
>       either no-fone?
> [waldo-has-no-phone][call-waldo waldo/phone]
>   ]
> 
>   That's a fair approach, similar to how you might
> tackle the
>   problem in basic, maybe. But with REBOL you can
> get much
>   more done in place.  Most things return meaningful
> values so
>   the left side of most functions represent an
> excellent
>   place to dock another useful function, save space,
> save
>   steps, and preserve the utility of results.
> 
>   How about this:
> 
>   find-waldo: func [block [block!] /local result][
>      if not result: foreach obj block [
>          if obj/name = "waldo" [break/return any
> [obj/phone yes]]
>      ][wheres-waldo?]
>      either issue? result [call-waldo
> result][waldo-has-no-phone]
>   ]
> 
>   Okay, so we have less local variables, the code is
> smaller
>   and therefore is more efficient usually (and in
> this case
>   definitely). The first example trudged through the
> whole
>   block before deciding the outcome, where above we
>   BREAK/return as soon as we find waldo.  The
> FOREACH will
>   return the last evaluation, so if FOREACH makes it
> through
>   the whole block with out ever finding waldo it
> will return a
>   NONE from the last evalutation of the IF
> statement.  We use
>   the result of FOREACH to immediately determine if
> we found
>   waldo.  Now if result is not a NONE, it will be
> either an
>   issue!, waldo's phone number (#222-111-3333), or a
> TRUE
>   value (yes). The TRUE is arbitrary since we just
> have to
>   return a non false / non none from BREAK/return
> and we only
>   check if we have an issue which means it must be
> Waldo's
>   phone number.
> 
>   Programmers will have different styles, but the
> language
>   also has a style of its own.
> 
>   With REBOL it usually comes down to taking a
> function,
>   writing it, then rewriting it a few more times,
> carving out
>   the fat while expanding the capability.  As a
> general rule
>   most REBOL functions that are written can be
> reworked to
>   accomplish more, to provide more use in the same
> amount of
>   space or less.  Code in the eye of the fly and
> seek to know
>   the true path of the REBOL way!  :-)
> 
>   -jeff
> 
> -- 
> To unsubscribe from this list, please send an email
> to
> [EMAIL PROTECTED] with "unsubscribe" in the 
> subject, without the quotes.
> 


=====
please reply to: [EMAIL PROTECTED]

__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to