Menu
Coddy logo textTech

クラスと正規表現を用いた case

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 38/56。

範囲を用いて case を使用しました。この同じステートメントは、when が内部で呼び出す === 演算子を介して、クラス正規表現ともマッチングします。

どのような種類の値を取得したかに応じて分岐するには、クラスによってマッチさせます:

def describe(value)
  case value
  when Integer then "a whole number"
  when Float   then "a decimal"
  when String  then "some text"
  else              "something else"
  end
end

puts describe(42)      # 整数
puts describe(3.14)    # 小数
puts describe("hi")    # テキスト

正規表現に対してマッチングを行うことで、文字列の形状(電話番号、メールアドレス、日付など)に応じて条件分岐します。

def kind_of(text)
  case text
  when /^\d+$/        then "all digits"
  when /@/            then "looks like an email"
  when /^[A-Z]/       then "starts with a capital"
  else                     "other"
  end
end

これは if/elsif 内で is_a?match? の呼び出しを連鎖させるよりもはるかにクリーンです。

challenge icon

チャレンジ

簡単

1行の input を読み込みます。入力がどのように looks(見えるか)に基づいて、case 文を使用して次のラベルのいずれかを出力してください:

  • すべての digits:number
  • @ を含む:email
  • capital 文字で始まる:name
  • その他すべて:unknown

記載された順序でルールを確認してください(したがって 123unknown ではなく numberkevin@coddy.techemailAlicename となります)。

入力 kevin@coddy.tech の場合、出力は email です。

自分で試してみよう

input = gets.chomp

# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ