Hacker News new | past | comments | ask | show | jobs | submit login

I feel where Ruby's optional parenthesis syntax really shines is in method call chaining.

e.g.

    employees.flat_map(&:addresses).map(&:city).uniq.sort
    # in place of
    employees().flat_map(&:addresses).map(&:city).uniq().sort()



Oh thank god, we saved ourselves six characters! And the only thing we sacrificed is knowing for sure whether we're accessing an object's property, or calling a method!


It's all methods in Ruby. Properties are private. You access them via methods.


As a non-Ruby programmer, this sounds like it makes it non-obvious whether you're calling a class' method or attribute. Do you end up relying on your editor to help you out ?


> As a non-Ruby programmer, this sounds like it makes it non-obvious whether you're calling a class' method or attribute.

“Attributes” in Ruby are just methods that do attribute-like things, so there is no ambiguity: it is always a method.


Every langauge with native support for property setters and getters has the same problem. C# has decent IDE support, in JS we pretend it never happens, Ruby is at least upfront


It's actually nice that it does not matter if it's a function or attribute that your calling in ruby. Check out the Uniform access principle (https://en.wikipedia.org/wiki/Uniform_access_principle).

When used correctly you can write IMHO really clean and concise OOP code where (cascading) changes are easily made.


Where this kills me is ambiguous commas.

    something = [ alpha beta, gamma ]
I have no idea if I just invoked alpha(beta, gamma) and put the result into a single-member array, or if I've got an array with two elements - alpha(beta) and gamma.


Yep you can create ambiguous nasty code like this. It's is clearly not expressing intent, so you would add parentheses.


It's not actually ambiguous; though it is a bit of language-specific syntax to learn.


Agreed. It is the "idiomatic" way of writing code in Ruby. I love Java but writing lambda expressions in Java with deeply nested parenthesis makes the code really ugly and less readable esp with chaining.

As far as I understand, Ruby style is writing the code in the most elegant way to increase readability and (hopefully) reduce chances of bugs.


So what would you expect my example above do, at a glance?

Or is my example something that a good Ruby developer never write at all?


It's not ambiguous to the computer, but it is ambiguous to a human at a glance.


As someone who writes basically only C++ and Python, that code looks like a nightmare.


Python has the `@property` decorator, which effectively disguises method calls as attribute access. To me, that's as bad, if not worse, than the ruby code posted above.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: