Search code examples
rubyformsbuildercurly-braces

Does using curly braces go against the "Ruby way"?


I've been using Ruby for about two weeks, and I've not been programming for too terribly long, but I'm coming at the language from a C-style background (C++, C#, etc). Anyway - a good friend and mentor of mine was looking at some Ruby that I'd written the other day, and he told me that he'd smack me if he caught me using curly braces in Ruby again.

Well, I just found out about Builder yesterday, via this About.com article, and the example that they have posted uses curly braces. Is there a different way to do this, or do you have to use curly braces with Builder?

This may seem like a minor point, but I'm new to Ruby, and I don't want to let myself develop any bad habits. What do you guys think?


Solution

  • While some people go with "braces for one-liners, do-end for multi-liners", I personally find the following rule the most logical:

    • use do-end when your block has side-effects (typically, with each and related methods) and
    • use braces when your block is without side-effects (map, inject and alike)

    This logic goes well with method chaining issue that Matt wrote about.

    One benefit of this approach is that it is going to make you think about side-effects every time you write a block, and they are very important, although sometimes overlooked by coders with no functional programming background.

    Another way to put it, without involving side-effects terminology would be:

    • use do-end for blocks that perform
    • use { and } for blocks that return

    Here are couple of articles with more info:

    http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc

    http://talklikeaduck.denhaven2.com/2007/10/02/ruby-blocks-do-or-brace