C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Ranges: We use numeric ranges in the when-statements. To specify a range, separate two numbers with two periods.
Else: Else optionally comes at the end. If no other ranges or values match, the else-statement is reached. This is a default.
Ruby program that uses case-statement
# Test method.
def test(quality)
# Return a case.
return case quality
when 0..2 then "Low"
when 3..5 then "Medium"
when 6..8 then "High"
else "Invalid"
end
end
# Call test method.
print test(0), "\n"
print test(4), "\n"
print test(8), "\n"
print test(-1), "\n"
Output
Low
Medium
High
Invalid
Note: The case statement evaluates and its result is stored in the "result" variable's memory location.
Expression: We use the case as an expression in this program, one that is evaluated to return a value.
Tip: In Ruby, expressions and statements are often interchangeable. This makes constructs like "case" useful in many contexts.
Ruby program that uses case, no ranges
value = 5
# Use case with numbers, no ranges.
result = case value
when 4 then 400
when 5 then 500
when 6 then 600
else 0
end
# Display input and output.
puts value
puts result
Output
5
500
Also: This case expression uses an else-statement. If the value of "name" is not matched, the value 3 is returned by this expression.
Ruby program that uses string case
# The value.
name = "sam"
# Assign to result of string case expression.
id = case name
when "edna" then 0
when "fred" then 1
when "sam" then 2
else 3
end
# Display result.
puts id
Output
2
Ruby program that uses when, multiple values
apartment = 200
case apartment
when 100, 200
# Has two possible matching values.
puts "100 or 200"
when 0
puts "Zero"
end
Output
100 or 200
Here: The case block detects that the word "Alexandria" starts with the letter "A." The Regexp is described.
Ruby program that uses Regexp, case
value = "alexandria"
# Use case with regular expressions.
case value
when /^a/
puts "Starts with letter A"
when /^b/
puts "Starts with B"
end
Output
Starts with letter A
Pattern description
^a String starts with a lowercase letter A.
^b String starts with a "b".
Tip: After a Regexp matches a value in a case, its groups are stored in a special variable $1. We get the captured value there.
Tip 2: We can also directly display the value of $1 in a puts call with the code #$1. This helps us develop a simple text parser.
Ruby program that uses case, Regexp, captures
# An array of strings.
values = ["value 100", "string box"]
# Loop over strings.
values.each do |value|
# Use regular expression in case-statement.
# ... Use capturing.
case value
when /value (\d+)/
# Access the capture from $1.
argument = $1
# Use format string to display argument.
puts "Value argument = %s" % argument
when /string (.+)/
# Directly display captured value.
puts "String argument = #$1"
end
end
Output
Value argument = 100
String argument = box
Version 1: In this version of the logic, we assign a variable to the result of a case statement.
Version 2: Here, we assign a variable using an if-statement instead of the case-statement.
Result: To boost performance, it is sometimes helpful to replace cases with if-statements.
Ruby program that times case-statement
count = 100000
n1 = Time.now.usec
x = 0
v = 5
# Version 1: assign a variable with a case-statement.
count.times do
x = case v
when 0..1 then 1
when 2..3 then 2
when 4..6 then 3
else 0
end
end
puts x
n2 = Time.now.usec
# Version 2: assign a variable with an if-statement.
count.times do
if v >= 0 && v <= 1
x = 1
elsif v >= 2 && v <= 3
x = 2
elsif v >= 4 && v <= 6
x = 3
else
x = 0
end
end
puts x
n3 = Time.now.usec
# Times.
puts ((n2 - n1) / 1000)
puts ((n3 - n2) / 1000)
Output
3
3
92 ms, case-statement
15 ms, if-elsif-else statements