"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