"Gavin Sinclair" <gsinclair / soyabean.com.au> schrieb im Newsbeitrag
news:1074470277.20030801003703 / soyabean.com.au...
> On Thursday, July 31, 2003, 8:58:48 PM, Robert wrote:
>
>
> > "Arthur" <arthur8 / boardermail.com> schrieb im Newsbeitrag
> > news:16e0bc53.0307310222.11587422 / posting.google.com...
> >> "Gavin Sinclair" <gsinclair / soyabean.com.au> wrote in message
> >
news:<60107.203.185.214.34.1059543084.squirrel / webmail.imagineis.com>...
> >> > > On Tue, 2003-07-29 at 22:30, Robert Klemme wrote:
> >> > >
> >> > >> My solution is to use {} for one line blocks and do..end for
more
> >> > >> complicated things.
> >> > >
> >> > > I tried this style for a while.  But then every time I added
lines
> > to a
> >> > > one-line block, I had to change {} to do/end.
> >> > >
> >> > > Today I normally used {} on all blocks, except in Rake files.
> >> >
> >> >
> >> > My take is: {} are for functional blocks; do..end for procedural
> > blocks.
> >> > That shows me which expressions are important for their results,
and
> > which
> >> > are not.
> >> >
> >> > Gavin
> >>
> >>
> >> This sounds very interesting.  Can you expand upon this a little?
> >> What do you take as the difference between procedural blocks and
> >> funcitonal blocks?  Can you provide an example?
>
> > I guess he means
>
> > (0..10).each do |i|; puts i; end
> > (0..10).map {|i| i+i}
>
> >     robert
>
> Precisely.  Some blocks are called to _do_ something, and some are
> called to _evaluate_ to something (or, to _return_ something).  That's
> a high-level difference that is important to understanding high-level
> program flow, so providing a visual signal in the code is some help to
> me.
>
> It turns out that most functional blocks are one-liners, like:

Interestingly we seem to reach approximately the same formatting because
of different reasons. :-)

>   set.find { |e| e.satisfies condition }
>
> But then you get some larger ones:
>
>   set.map { |e|
>     if something
>       e.x
>     else
>       e.y
>     end
>   }

Know your ternary operator: :-)
set.map { |e| something ? e.x : e.y }

> do...end looks silly on one line,

Yep.

> though, so I always spread that out:
>
>   people.each do |p|
>     process(p)
>   end
>
> I figure the concept there is worth devoting three lines to.

A do;end for me is always a multiliner, too.

Cheers

    robert