Ruby で switch ステートメントを書く

Nurudeen Ibrahim 2023年1月30日
  1. Ruby switchRanges に一致する
  2. Ruby switchRegex に一致する
  3. Ruby switchProc に一致する
Ruby で switch ステートメントを書く

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 switchRanges に一致する

この例では、指定された 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 switchRegex に一致する

正規表現を 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 switchProc に一致する

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