Forum: Ruby highlighter for operator precedence

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
32833d3ac17df58279c087afe3f7cf92?d=identicon&s=25 Mike Schwab (mschwab)
on 2007-04-19 20:59
Is there a web site that will highlight code to show who Ruby will send
each message to?  I like playing around with parentheses and the ternary
operator, and I want to explore the precedence distinction between {}
and do end.

Some find it unnecessary to remove all implied parentheses and still
strive for one-liners, but I find it makes the code more readible, and
more emulatable.  I think a visual tool for learning these rules could
make Ruby more accessible.

Once that were ready, would it not be a small step to make a tool that
strips the unnecessary parens itself?
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2007-04-20 11:01
(Received via mailing list)
On 19.04.2007 20:59, Mike Schwab wrote:
> Is there a web site that will highlight code to show who Ruby will send
> each message to?  I like playing around with parentheses and the ternary
> operator, and I want to explore the precedence distinction between {}
> and do end.

I do not know such a site.  But you can do something like this to see
what happens:

irb(main):011:0> baz=1
=> 1
irb(main):012:0> def foo(*a) [:foo, a] end
=> nil
irb(main):013:0> def bar(*a) [:bar, a] end
=> nil
irb(main):014:0> foo bar baz
(irb):14: warning: parenthesize argument(s) for future version
=> [:foo, [[:bar, [1]]]]
irb(main):015:0> foo bar(baz)
=> [:foo, [[:bar, [1]]]]
irb(main):016:0> foo(bar baz)
(irb):16: warning: parenthesize argument(s) for future version
=> [:foo, [[:bar, [1]]]]
irb(main):017:0>

> Some find it unnecessary to remove all implied parentheses and still
> strive for one-liners, but I find it makes the code more readible, and
> more emulatable.  I think a visual tool for learning these rules could
> make Ruby more accessible.

Well, if it suits you well why don't you just leave the parens in?  From
time to time I tend to use parens in boolean expressions even though I
know that && binds before || just to not have to worry about precedence.

> Once that were ready, would it not be a small step to make a tool that
> strips the unnecessary parens itself?

Apparently nobody has bothered so far to do it so it must be a minor
problem. :-)

Kind regards

  robert
E34b5cae57e0dd170114dba444e37852?d=identicon&s=25 Logan Capaldo (Guest)
on 2007-04-20 16:40
(Received via mailing list)
On 4/19/07, Mike Schwab <mike.schwab@gmail.com> wrote:
>
> Once that were ready, would it not be a small step to make a tool that
> strips the unnecessary parens itself?


If an expression is so complicated you need a tool to strip
"unnecessary"
parens from it, what makes you think you won't need a tool to put the
parens
back in when you go to read it again and figure out what it does? A tool
to
find and exploit the dark corners of ruby's precedence rules to avoid
parentheses seems to be missing the forest for the trees. If you have a
complicated expression with a lot of parens, maybe its time to name some
of
those sub-expressions, not automate its obfuscation.
This topic is locked and can not be replied to.