Ruby で switch ステートメントを書く
Nurudeen Ibrahim
2023年1月30日
if
ステートメントの動作と同様に、switch
ステートメントを使用すると、特定の条件に基づいてコードの実行を制御できます。このチュートリアルでは、Ruby で switch
ステートメントがどのように使用されるかを見ていきます。
以下は、Ruby の switch
ステートメントの構文です。
case argument
when condition
# do something
else
# do something else if nothing else meets the condition
end
それを使用するいくつかの一般的な基本的な方法を見てから、それほど一般的ではないいくつかのやや複雑な例を見ていきます。
コード例:
def continent_identifier(country)
case country
when "Nigeria"
puts "Africa"
when "Netherlands"
puts "Europe"
when "India"
puts "Asia"
else
puts "I don't know"
end
end
continent_identifier("India")
continent_identifier("Netherlands")
continent_identifier("Germany")
出力:
Asia
Europe
I don't know
上記は、switch
ステートメントを使用して国の大陸を識別する方法の基本的な例です。上記の例を見ると、次の点に注意してください。
- 他のほとんどのプログラミング言語の
switch
ステートメントとは異なり、Ruby のswitch
ステートメントでは、各when
の最後にbreak
は必要ありません。 - Ruby の
switch
ステートメントを使用すると、when
ごとに複数の値を指定できるため、変数がいずれかの値と一致した場合に結果を返すことができます。以下に例を示します。
コード例:
def continent_identifier(country)
case country
when "Nigeria"
puts "Africa"
when "Netherlands", "Germany"
puts "Europe"
when "India"
puts "Asia"
else
puts "I don't know"
end
end
continent_identifier("India")
continent_identifier("Netherlands")
continent_identifier("Germany")
出力:
Asia
Europe
Europe
内部での Ruby の switch
ステートメントは、===
演算子を使用して、case
変数と指定された値、つまり value === argument
を比較します。その結果、Ruby スイッチ
を使用すると、より巧妙な比較を行うことができます。
Ruby switch
の Ranges
に一致する
この例では、指定された case
変数が指定された範囲のいずれかに含まれているかどうかを確認します。
コード例:
def check_number(n)
case n
when 1..5
puts "Falls between 1 & 5"
when 6..10
puts "Falls between 6 & 10"
end
end
check_number(3)
check_number(7)
出力:
Falls between 1 & 5
Falls between 6 & 10
Ruby switch
で Regex
に一致する
正規表現を case
変数と照合することもできます。これを以下の例に示します。
コード例:
def month_indentifier(month)
case month
when /ber$/
puts "ends with 'ber'"
when /ary$/
puts "ends with 'ary'"
end
end
month_indentifier("February")
month_indentifier("November")
出力:
ends with 'ary'
ends with 'ber'
Ruby switch
で Proc
に一致する
Ruby Proc
は、変数に格納したり、渡したりできるコードのブロックをカプセル化します。Ruby Proc
の詳細については、こちらを確認してください。次の例は、switch
ステートメントで Ruby Proc
を使用する方法を示しています。
コード例:
def check_number(number)
case number
when -> (n) { n.even? }
puts "It's even"
when -> (n) { n.odd? }
puts "It's odd"
end
end
check_number(3)
check_number(6)
出力:
It's odd
It's even