Ruby case Statement

The case statement in Ruby allows us to execute a block of code among many alternatives.

You can do the same thing with multiple if...elsif...else statements. However, the syntax of the case statement is much easier to read and write.


Syntax of the case Statement

case expression

when value1
  # Code to run if expression == value1

when value2
  # Code to run if expression == value2

...

else
  # Code to run if none of the 'when' conditions match

end

How does the case statement work?

The expression is evaluated once and compared with each when value using the == operator.

  • If there is a match, the code under that when label is executed. For example, if expression == value2 is true, the code after when value2 is executed.
  • If there is no match, the code inside the else block runs (if provided).

Flowchart of case Statement

Ruby case Statement Flowchart
Flowchart of Ruby case Statement

Example 1: Simple Size Checker Using case Statement

# Ruby program to check the size
# using the case statement

number = 44

case number

when 29
  puts "Small"

when 42
  puts "Medium"

when 44
  puts "Large"

when 48
  puts "Extra Large"

else
  puts "Unknown"

end

Output

Large

In the above example, we have used the case statement to find the size. Here, we have a variable number which is compared with each value in the when clauses.

Since the value matches with 44, the code inside when 44 is executed.

puts "Large"

Example 2: Simple Calculator Using case Statement

# Program to build a simple calculator
# using case statement

print "Enter an operator (+, -, *, /): ";
operator = gets.chomp

print "Enter first number: "
num1 = gets.chomp.to_f

print "Enter second number: "
num2 = gets.chomp.to_f

case operator
when "+"
  print "#{num1} + #{num2} = #{num1 + num2}"
  
when "-"
  print "#{num1} - #{num2} = #{num1 - num2}"
  
when "*"
  print "#{num1} * #{num2} = #{num1 * num2}"
  
when "/"
  if num2 == 0
    print "Cannot divide by zero."
    
  else
    print "#{num1} / #{num2} = #{num1 / num2}"
    
  end
  
else
  # Invalid operator handling
  print "Invalid operator!"

end

Sample Output 1

Enter an operator (+, -, *, /): +
Enter first number: 6
Enter second number: 3
6.0 + 3.0 = 9.0

Sample Output 2

Enter an operator (+, -, *, /): *
Enter first number: 6
Enter second number: 3
6.0 * 3.0 = 18.0

In the above program, we prompted the user to:

  • Enter an operator: +, -, *, or /.
  • Enter the first number: num1.
  • Enter the second number: num2.

Based on the user input, the case statement performs the corresponding calculation.

If the input operator is not recognized, the program shows an Invalid operator message.


More on Ruby case Statement

Using 'then' in when clauses

You can write the when condition and the code to execute on the same line using then keyword. For example,

number = 2

case number
when 1 then puts "One"
when 2 then puts "Two"
when 3 then puts "Three"
else puts "Other"
end

# Output: Two

Notice that we haven't used then with the else statement; it's only used with when.

Using 'case' without an expression

Ruby allows you to use a case statement without an expression. In this form, each when clause acts like an if condition. For example,

age = 25

case
when age < 13
  puts "Child"
when age < 20
  puts "Teen"
when age < 60
  puts "Adult"
else
  puts "Senior"
end

# Output: Adult

The above code is equivalent to:

age = 25

if age < 13
  puts "Child"
elsif age < 20
  puts "Teen"
elsif age < 60
  puts "Adult"
else
  puts "Senior"
end
Using multiple values in one 'when'

You can match multiple values in a single when by separating them with commas. For example,

day = "Sunday"

case day
when "Saturday", "Sunday"
  puts "It is the weekend!"
else
  puts "It is a weekday."
end

# Output: It is the weekend!
Did you find this article helpful?

Our premium learning platform, created with over a decade of experience and thousands of feedbacks.

Learn and improve your coding skills like never before.

Try Programiz PRO
  • Interactive Courses
  • Certificates
  • AI Help
  • 2000+ Challenges