fr00ty_l00ps
fr00ty_l00ps

Reputation: 730

"Or" in If Blocks in Ruby

So I am writing a Ruby program for school that changes the value of a boolean to true if a certain value is either 1 or 3, and to false if it is 0 or 2. Since I come from a Java background, I thought that this code should work: if n == 1 || n == 3

But it does not. So my question here is is it possible to use an "Or" expression thingy in If blocks in Ruby? I know that my current situation could be solved easily by just something like the following:

if n == 0
    t_o_f = false
elsif n == 1
    t_o_f = true

Et Cetera. But I want to know if I can use an Or in If blocks for the future.

Upvotes: 2

Views: 287

Answers (3)

steenslag
steenslag

Reputation: 80075

In addition to @Wayne Conrad: if there is little or no 'logic' deciding if n is true or false, then this is also a good option:

result = case n
  when 1, 3 then true
  when 0, 2 then false
end

Upvotes: 0

Wayne Conrad
Wayne Conrad

Reputation: 108089

Yes, any expression can be used in an if condition, including those using the || (logical or) operator.

As with Java, Ruby's || operator short-circuits. That is, if the left side is true, the right side is not evaluated.

Idiomatic ruby uses postfix if for one-liners:

puts "Yes" if n == 4 || n == 5

Avoid postfix if the line is long, however, and break it into multiple lines:

if n == 4 || n == 5
  puts "This is a big long string to be output....................."
end

That's because postfix if can get visually lost at the end of a long line.

You can have a one-liner with prefix if, but it's not commonly seen:

if n == 4 || n == 5 then puts "foo" end

or, perhaps:

if n == 4 || n == 5 ; puts "foo" ; end

This is really a multi-line if condensed into one line; the semicolons act as line breaks.

When testing for multiple conditions, it can sometimes be valuable to use Array#include?:

puts "foo" if [4, 5].include?(n)

The value of this for only two conditions is not that great. For three or more, it reads well.

Upvotes: 3

Roozbeh Zabihollahi
Roozbeh Zabihollahi

Reputation: 7347

The or operator works, and you can write the keyword too:

if n==1 or n==2
end

http://www.tutorialspoint.com/ruby/ruby_operators.htm

And you could also write what you want this way:

x = (n%2) ? true : false

Upvotes: 1

Related Questions