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.