塩焼きブログ

塩焼きに関しての研究内容を公開しています

Rubyで多数の条件分岐をcaseで行う

Rubyにはifunless以外にも条件分岐を行えるcaseというのが存在する。elsifで条件を追加していっても同様の処理を行えるが、コードによってはcaseを使った方が分かりやすく記述することができる。

students = {
  "Mike" => 5,
  "Jane" => 4,
  "Tom" => 3,
  "Emily" => 2,
  "Bill" => 1,
  "Jack" => 0
}
students.each do |key,value|
  case value
  when 5
    puts "#{key} class A"
  when 4,3
    puts "#{key} class B"
  when 2,1
    puts "#{key} class C"
  else
    puts "#{key} are retest"
  end
end
# Mike class A
# Jane class B
# Tom class B
# Emily class C
# Bill class C
# Jack are retest

casewhenには正規表現を使うこともできる。

students = {
  "Mike" => "My favorite food is fish burger",
  "Jane" => "My favorite food is apple jam",
  "Tom" => "My favorite food is meat",
  "Emily" => "My favorite food is lettuce",
  "Bill" => "My favorite food is apple pie",
  "Jack" => "My favorite food is fish sandwich"
}
students.each do |key,value|
  case value
  when /apple/
    puts "#{key} like apple"
  when /fish/
    puts "#{key} like fish"
  else
    puts "#{key} like unknown"
  end
end
# Mike like fish
# Jane like apple
# Tom like unknown
# Emily like unknown
# Bill like apple
# Jack like fish

Rubyではない他の言語におけるswitchのようなものを探している人は、Rubyではそれがcaseに該当するのかもしれない。