Hacker News new | ask | show | jobs
by zenspider 6497 days ago

  foo = returning(Object.new) do |f|
    def f.bar
      ...
    end
    def f.bash
      ...
    end
  end

  # vs

  foo = Object.new
  def foo.bar
    ...
  end
  def foo.bash
    ...
  end
1 line shorter, less indentation, more clear. What does returning get you besides another message send and block activation? I have yet to see a good use for it. (yes, I'm biased. calibrate accordingly)
1 comments

It really depends. If the definitions of foo.bar and foo.bash make sense independantly of the assignment to foo, I prefer the second form as well. If in my brain the whole thing is "atomic", I prefer the returning form or to make a helper method so that they are composed into a logical chunk.

For the same reason, I write:

  foo = bar
  bash = blitz
When teh two statements are independant, and:

  foo, bar = bash, blitz
When they are deeply related and should not be broken up. Sometimes that is hard to read and I will get gratuitous:

  begin
    foo = bar
    bash = blitz
  end
What can I say... that uses more characters than needed. It isn't always about saving electrons for me.