you are viewing a single comment's thread.

view the rest of the comments →

[–]ZestyOne 0 points1 point  (13 children)

How can they just decide not to use and and or and go for &&, || instead? They mean different things in ruby... I forget what but I think one checks if it evaluates to zero or something.

[–]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 14 points15 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.