Why is this here?
I always forget how to write case statements and always find myself looking it up. This is my note to future self on how to write case / switch statements in Ruby.
Syntax
Syntax for a case statement is as follows:
case argument
when condition
# do stuff
else
# do stuff if nothing else meets the condition
end
"Else" is optional and represents the "default" case.
All case statements written in this syntax are compared with the ===
operator so be aware of that! ===
has slightly different semantics from ==
which can be found here:
This same ===
feature is what allows us to compare Regexs on Strings and other cool behavior. ===
is overriden by individual modules but is usually aliased to ==
Basic statement
arg = "blah"
case arg
when /blah/
puts "woah, what a blah!"
else
puts "Theres no blah here!"
end
Adding multiple conditionals
def fruit_identifier(fruit)
case fruit
when "orange", "grapefruit"
puts "Woah! Thats some good citrus!"
when "apple", "banana", "pear"
puts "Just some normal fruits. Nothing to see here."
end
end
One liners
def one_line_case
case "only_one"
when "only_one" then puts "Look ma! One line!"
end
end
if / else syntax
a = 2
case
when a == 1, a == 2
puts "a is one or two"
when a == 3
puts "a is three"
else
puts "I don't know what a is"
end
Further Reading
https://www.rubyguides.com/2015/10/ruby-case/
https://ruby-doc.org/core-2.7.3/doc/syntax/control_expressions_rdoc.html#label-case+Expression
Top comments (2)
I never understood the reason why they just did not go with a defacto standard (switch, case, default)? It is quite annoying. I have to look this up all the time when I have to write some Ruby code. Sort of like Microsoft choosing a backslash for a file separator.
I also always forget how to write these and have to look it up.