Ruby If Examples: Elsif, Else and Unless

This Ruby page uses the if-statement, elsif and else. It shows the unless statement.

If, else. In a program, statements are sequentially executed.

One comes after another. With an if-statement, we introduce a branch. We can avoid statements and jump to other ones.

 

 

Selection statements. Here we direct the flow of control. And with elsif and else we handle alternative branches. In Ruby an end-statement is often required.

 

 

If example. After the if-keyword we place an expression. Ruby then checks whether this statement evaluates to true or false. If it evaluates to true, the inner block is entered.

 

However: If the expression evaluates to false, the inner block of an if-statement is not reached. The statements are not executed.

Based on:

Ruby 2

Ruby program that uses if-statements

# Some integer variables.
a = 1
b = 2
c = 3

# Test for inequality.
if a != b
    puts "1 != 2"
end

# Add and then test for equality.
if a + b == c
    puts "1 + 2 == 3"
end

Output

1 != 2
1 + 2 == 3

Elsif, else. An if-statement can have more parts. It can include an elsif-statement and an else-statement. They are reached only when the initial if-statement evaluates to false.

Here: The statement within the else-block is reached. The if, and the elseif, both evaluate to false. "Z" is printed.

Tip: For performance, putting the condition that matches most often first is fastest. Fewer conditions must be evaluated in total.

Ruby program that uses if, elsif and else

# Two integers.
a = 1
b = 2

# Use if, elsif, else on the integers.
if a > b
    # Not reached.
    print "X"
elsif a == b
    # Not reached.
    print "Y"
else
    # This is printed.
    print "Z"
end

Output

Z

One-line. Ruby supports one-line if-statements. The "if" is used to modify the preceding statement. These statements are only run if the if-expression evaluates to true.

Here: The first statement has no effect because the variable is not greater than 5. But the second statement takes effect.

Ruby program that uses one-line if-statements

# Variable equals 5.
i = 5

# Use one-line if-statements.
puts "Greater than 5" if i > 5
puts "Not greater than 5" if i <= 5

Output

Not greater than 5

Unless. This is a negated if-statement. It has the same functionality as an if-statement that tests for false, not true. But this syntactic sugar is sometimes useful.

Also: There is an else-statement that can follow the unless statement. The syntax is just like an if-block.

Ruby program that uses unless

i = 4

# Use an unless-else construct.
unless i == 3
    puts "UNLESS"
else
    puts "ELSE"
end

Output

UNLESS

Unless, one line. An unless modifier can also be used on one line. This syntax makes programs readable, almost like English: you take a certain action unless a condition is true.

Here: We display the value of the string with puts, unless the value equals Cat. So the value Dog is displayed.

Ruby program that uses unless, one-line

animal = "Dog"

# Display the animal string unless it equals Cat.
puts animal unless animal == "Cat"

Output

Dog

And, or. Sometimes we need to chain together expressions in an if-statement. We can use the "and" or "&&" operators. They have the same effect. Two syntax forms for "or" are also supported.

Short-circuit: These operators short-circuit. And will stop checking after its first false result, "or" after its first true.

Note: The English operators (and, or) are easier to read. But the symbolic ones are more familiar to developers of C-like languages.

Ruby program that uses and, or

animal1 = "cat"
animal2 = "dog"

# And operators.
if animal1 == "cat" and animal2 == "dog"
    puts 1
end

if animal1 == "cat" && animal2 == "dog"
    puts 2
end

# Or operators.
if animal1 == "whale" or animal2 == "dog"
    puts 3
end

if animal1 == "whale" || animal2 == "dog"
    puts 4
end

Output

1
2
3
4

Ternary. This statement uses a question mark and a ":" after an expression. If the expression evaluates to true, the first result is chosen.

Otherwise: The second value is used as the result. Here, the value equals 10, so the result is 20. The 0 is returned in all other cases.

Ruby that uses ternary

value = 10

# Ternary statement.
result = value == 10 ? 20 : 0
puts result

Output

20

Equals. In an if-conditional, two equals signs check for equality. Ruby will report a warning if you use just one equals sign. An assignment uses one equals. A conditional, two.

But: The program still compiles. In some languages, this syntax results in a fatal, compile-time error.

Ruby that causes equals sign warning

value = 10

# We should use two = in a conditional.
if value = 20
    puts true
end

Warning

C:/programs/file.rb:6: warning: found = in conditional, should be ==

Output

true

Assign. Like a method, an if-statement returns a value. This comes from the last statement evaluated. We can assign a variable to the result of an if-statement.

Result: In this program, the variable cat_sound is assigned to "meow" because the size variable is equal to 0.

Ruby that assigns to if

# Set size to zero.
size = 0

# Assign cat_sound to result of if-statement.
cat_sound =
    if size == 0
	"meow"
    else
	"roar"
    end

puts(cat_sound)

Output

meow

Then. This keyword can be part of an if-statement. But usually in Ruby programs do not use the "then." This keyword may be preferred if makes the code clearer to read.

Note: In programming, clarity is key. But standard forms—using Ruby that other developers also use—is also important.

This document will omit the optional then for all expressions as that is the most common usage of if.

Control Expressions: ruby-doc.org

Ruby that uses then keyword

value = 10
size = 10

# The "then" keyword is optional.
if value == size then
    puts true
end

# Omit the then.
if value == 10
    puts 10
end

Output

true
10

True, false. In an if-statement all values can be evaluated for truth. In this program, we test for truth. We test numbers, empty collections like arrays, and nil.

Numbers: All numbers (including 0) evaluate to true. Other programming languages sometimes treat 0 as false, but not Ruby.

Empty array: An empty Array evaluates also to true. Empty collections are treated the same as ones with elements.

Nil: False and nil evaluate to false—these were the only false values found in this test.

Ruby that tests for true, false

values = [0, 1, -1, true, false, nil, Array.new()]

# Test all the values for truth.
values.each do |v|
    if v
	puts String(v) + " = true"
    else
	puts String(v) + " = false"
    end
end

Output

0 = true
1 = true
-1 = true
true = true
false = false
 = false
[] = true

A summary. The if-statement is an imperative branching statement. This means it affects what statements are next executed. Its effect is directly specified by the programmer.

 

Some concepts. With an if-statement, we create conditional blocks. The data in our programs influences what operations are taken. An elseif and else provide alternative paths.