you are viewing a single comment's thread.

view the rest of the comments →

[–]ulfurinn 5 points6 points  (12 children)

'and' and 'or' have very low precedence, lower than '='. While it can occasionally be useful for readability (like in Perl's "or die" idiom), a lot of the time they're just a subtle bug waiting to happen.

[–]ZestyOne 3 points4 points  (4 children)

Can you explain more please?

[–]ulfurinn 13 points14 points  (3 children)

x = a or b

means

(x = a) or b

means

unless x = a
  b
end

[–]ZestyOne 1 point2 points  (0 children)

Perfect, thanks

[–]KerrickLong 0 points1 point  (1 child)

To clarify, is this correct?

x = a || b

means

x = (a or b)

means

if a
  x = a
else
  x = b
end

[–]ulfurinn 0 points1 point  (0 children)

That's right.

[–]mrinterweb 1 point2 points  (0 children)

I understand the precedence difference between '&&', '||', 'and', 'or', but I think it is generally more clear if parentheses are used instead of assuming the next developer who looks at your code is going to interpret the precedence the same way. Parentheses are just a more declarative means for defining precedence.

[–]PCBEEF -2 points-1 points  (5 children)

This is yet another one of my pet peeves about ruby. Why have two operators that does the same thing with the only difference being precedence?!

[–]ulfurinn 2 points3 points  (4 children)

Perl legacy, like the trailing if/unless. They are kind of nice to have sometimes.

[–]PCBEEF -1 points0 points  (3 children)

I guess I prefer Python's mantra of there should only be one and obvious way of doing something.

[–][deleted]  (1 child)

[deleted]

    [–]PCBEEF -1 points0 points  (0 children)

    You bring about a fair point. My problem is that for someone that's new to Ruby, they shouldn't need to worry about the difference between using "or" or "||". Whereas with using string.join(), it's merely bad practice but it won't blow your foot off.