Rubyにおけるcase文の代替方法
case文の構文:
case expression
when value1
# value1と一致した場合の処理
when value2
# value2と一致した場合の処理
else
# どの場合にも一致しなかった場合の処理
end
例:
day_of_week = "Tuesday"
case day_of_week
when "Monday", "Wednesday", "Friday"
puts "It's a weekday."
when "Saturday", "Sunday"
puts "It's a weekend."
else
puts "I don't know that day."
end
解説:
case expression
: 比較する値を指定します。when value1
、when value2
など: 比較する値と一致する場合の処理を指定します。複数の値をカンマで区切って指定することもできます。else
: どの場合にも一致しなかった場合の処理を指定します。省略することもできます。
Rubyのcase文解説と例
Rubyのcase文は、他の言語のswitch文に似た機能を提供する制御フロー構造です。複数の条件を評価し、一致する条件の処理を実行します。
基本的な構文
case expression
when value1
# value1と一致した場合の処理
when value2
# value2と一致した場合の処理
else
# どの場合にも一致しなかった場合の処理
end
expression
: 比較する値です。when value1
: 比較する値がvalue1
と一致した場合の処理です。else
: どの場合にも一致しなかった場合の処理です。
例
day_of_week = "Wednesday"
case day_of_week
when "Monday", "Wednesday", "Friday"
puts "It's a weekday."
when "Saturday", "Sunday"
puts "It's a weekend."
else
puts "I don't know that day."
end
この例では、day_of_week
の値を比較し、それに応じてメッセージを出力します。
複数の条件の比較
複数の条件を同時に比較することもできます。
grade = 85
case grade
when 90..100
puts "Excellent"
when 80..89
puts "Good"
when 70..79
puts "Fair"
else
puts "Poor"
end
真偽値の比較
真偽値を比較することもできます。
is_raining = true
case is_raining
when true
puts "Take an umbrella."
else
puts "No need for an umbrella."
end
任意のオブジェクトの比較
任意のオブジェクトを比較することもできます。
fruit = "apple"
case fruit
when "apple", "orange"
puts "It's a citrus fruit."
when "banana"
puts "It's a tropical fruit."
else
puts "I don't know that fruit."
end
最後に一致した条件の処理
複数の条件が一致した場合、最初に一致した条件の処理が実行されます。
number = 5
case number
when 1, 2, 3
puts "It's a small number."
when 4, 5, 6
puts "It's a medium number."
else
puts "It's a large number."
end
この例では、number
は5なので、最初の条件が一致し、「It's a small number.」が出力されます。
Rubyにおけるcase文の代替方法
Rubyでは、case文がswitch文の役割を果たしますが、場合によっては他の方法も検討することができます。
if-elsif-else構文
最も一般的な代替方法は、if-elsif-else構文です。これは、複数の条件をチェックし、条件が満たされた場合の処理を実行するものです。
if condition1
# condition1が真の場合の処理
elsif condition2
# condition2が真の場合の処理
else
# どの条件も満たされない場合の処理
end
ハッシュ
ハッシュを使用して、値とそれに対応する処理を関連付けることもできます。
actions = {
"Monday" => "It's a weekday.",
"Saturday" => "It's a weekend.",
"Sunday" => "It's a weekend.",
}
day_of_week = "Tuesday"
puts actions[day_of_week] || "I don't know that day."
メソッドのディスパッチ
メソッドのディスパッチを使用して、オブジェクトのメソッドを呼び出すこともできます。
class Day
def monday; "It's a weekday."; end
def saturday; "It's a weekend."; end
def sunday; "It's a weekend."; end
end
day = Day.new
puts day.send(day_of_week.downcase) || "I don't know that day."
パターンマッチング(実験的な機能)
Ruby 3.0以降では、パターンマッチングが実験的な機能として導入されました。これは、より複雑な条件をマッチングするための構文を提供します。
day_of_week = "Tuesday"
case day_of_week
when "Monday" | "Wednesday" | "Friday" => puts "It's a weekday.",
when "Saturday" | "Sunday" => puts "It's a weekend.",
else puts "I don't know that day."
end
ruby switch-statement conditional-statements