Boolean Operators

Quick question:

I know that the ‘and’ and ‘or’ operators in ruby have the same
precedence, and ‘&&’ has a higher one than ‘||’ - but is there a best
practise for which one to use when precedence isn’t important?

Thanks,

~ Mark

On Sat, Mar 29, 2008 at 08:22:00AM +0900, Mark D. wrote:

Quick question:

I know that the ‘and’ and ‘or’ operators in ruby have the same
precedence, and ‘&&’ has a higher one than ‘||’ - but is there a best
practise for which one to use when precedence isn’t important?

I think “best practice” in this case is to use whatever makes it most
readable. I tend to like “and” and “or” (except when I don’t). Notable
exceptions include operators like ||= and &&=, which don’t use “and” and
“or”.

On 29.03.2008 00:22, Mark D. wrote:

I know that the ‘and’ and ‘or’ operators in ruby have the same
precedence, and ‘&&’ has a higher one than ‘||’ - but is there a best
practise for which one to use when precedence isn’t important?

I usually use && and || because they visually stand out better than
“and” and “or” and can be used with assignments (higher precedence than
“=”). I use “and” and “or” rather seldom mostly when chaining commands
as in

foo = doit() and puts foo

YMMV

Kind regards

robert

On 3/29/08, Robert K. [email protected] wrote:

I use “and” and “or” rather seldom mostly when chaining commands
as in

foo = doit() and puts foo

Keeping in mind that using && instead of and here has quite a
different result, even after adjusting the syntax of the puts call:

irb(main):001:0> a = 1 and puts “foo”
foo
=> nil
irb(main):002:0> a
=> 1
irb(main):003:0> a = 1 && puts “foo”
SyntaxError: compile error
(irb):3: syntax error, unexpected tSTRING_BEG, expecting kDO or ‘{’ or
‘(’
a = 1 && puts “foo”
^
from (irb):3
irb(main):004:0> a = 1 && puts(“foo”)
foo
=> nil
irb(main):005:0> a
=> nil

I don’t know that I’ve ever used ‘and’ since being bitten by the
relative precedence of = and ‘and’ in a rails app I inherited and was
extending.

I also don’t believe that I’d personally use
a = 1 and puts “foo”

rather than splitting it into two lines, perhaps replacing the and
with a semi-colon or otherwise steppng back and micro-refactoring the
code to make it clearer.

But I could be wrong.

Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

On 30.03.2008 14:16, Rick DeNatale wrote:

On 3/29/08, Robert K. [email protected] wrote:

I use “and” and “or” rather seldom mostly when chaining commands
as in

foo = doit() and puts foo

Keeping in mind that using && instead of and here has quite a
different result, even after adjusting the syntax of the puts call:

Which is the precise reason why I would use “and” in this case. Note
that I wrote “seldom” so this is not a too frequent idiom I employ.

rather than splitting it into two lines, perhaps replacing the and
with a semi-colon or otherwise steppng back and micro-refactoring the
code to make it clearer.

But I could be wrong.

I don’t think so. This is also a question of personal style and I don’t
find anything wrong with your approach.

Kind regards

robert