0Pricing
Ruby Academy · レッスン

case/in の基礎

構造的マッチングです。

「case/in の基礎」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

パターンマッチングの登場

Rubyのcase/in式は構造的パターンマッチングを実行します。単なる等価性ではなく、データの形状と内容を検査します。case/whenを強力に発展させた機能です。

case 42
in Integer
  puts 'it is an integer'
end

case/inとcase/when

case/whenは===で比較します(等価性ベースです)。case/inは値を分解し、変数に束縛できます。構造のマッチングにはinを使用します。

case 'hello'
in String => s
  puts "string of length #{s.length}"
end

リテラルのマッチング

inの分岐ではリテラル値にマッチさせることができ、正確な等価性チェックのように動作します。

case 3
in 1 then puts 'one'
in 3 then puts 'three'
in _ then puts 'other'
end

型パターン

クラス名を指定すると、その型の値にマッチします。内部では===が利用されます。

def describe(x)
  case x
  in Integer then 'number'
  in String then 'text'
  in Array then 'list'
  end
end
puts(describe([1, 2]))

変数の束縛

パターン内の単独の識別子は、マッチした値を束縛し、分岐内で使用できる新しい変数を作成します。

case [1, 2]
in [a, b]
  puts(a + b)
end

ワイルドカード

アンダースコア_は、束縛せずにあらゆる値にマッチします。すべてを受け入れる場合や、位置を無視する場合に使用します。

case 99
in 0 then puts 'zero'
in _ then puts 'something else'
end

ピン演算子

新しい変数を束縛するのではなく、既存の変数の値に対してマッチさせるには、^でピン留めします。

expected = 5
case 5
in ^expected
  puts 'matched the pinned value'
end

代替パターン

|でパターンを組み合わせると、1つの分岐で複数の候補のいずれかにマッチさせられます。

case 'b'
in 'a' | 'b' | 'c'
  puts 'in the first three letters'
end

マッチ全体の束縛

pattern => nameを使用すると、パターンを検査し、マッチした値を同時に名前に束縛できます。

case 'Ruby'
in String => word
  puts(word.upcase)
end

NoMatchingPatternError

どのin分岐にもマッチせず、elseもない場合、RubyはNoMatchingPatternErrorを発生させます。残りを安全に処理するにはelseを追加します。

case 10
in 1 then puts 'one'
else
  puts 'no specific match'
end

1行のマッチング

=>演算子は、1行で右向き代入によるマッチングを行い、失敗すると例外を発生させます。一方、in演算子はtrue/falseを返します。

result = [1, 2] in [Integer, Integer]
puts result

確認問題

case/inにマッチする分岐もelseもない場合、どうなりますか。

まとめ:case/inの基本

構造的マッチングの基礎を学びました。

  • case/inは単なる等価性ではなく、形状に基づいてマッチします
  • リテラル、型パターン、_ワイルドカード
  • 変数の束縛とピン演算子^
  • |とpattern => nameによる代替パターン
  • マッチしない場合はNoMatchingPatternErrorが発生します
case 7
in Integer => n then puts(n * 2)
end

よくある質問

「case/in の基礎」レッスンは無料ですか?

はい。「case/in の基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「case/in の基礎」で何を学びますか?

構造的マッチングです。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「case/in の基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. case/in の基礎
  2. 配列とハッシュのパターン
  3. Find パターンとガード
  4. 実践的なユースケース
← Ruby Academyに戻る