0Pricing
Ruby Academy · レッスン

Find パターンとガード

マッチ時の条件を扱います。

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

ガード条件

パターンにifまたはunlessのガードを追加できます。パターンと条件の両方が成立した場合にのみ、分岐がマッチします。

case 7
in Integer => n if n.odd?
  puts 'odd integer'
end

ガードで束縛変数を使う

ガードではパターンによって束縛された変数を参照できます。そのため、マッチしたデータについて複雑な条件を表現できます。

case [4, 9]
in [a, b] if a < b
  puts 'ascending pair'
end

unlessガード

unlessガードは条件が偽の場合にマッチします。ifの反対の動作です。

case 0
in Integer => n unless n.positive?
  puts 'zero or negative'
end

複数のガード付き分岐

複数の分岐にガードを組み合わせると、わかりやすい判断の流れを構築できます。

def grade(score)
  case score
  in Integer => s if s >= 90 then 'A'
  in Integer => s if s >= 70 then 'B'
  else 'C'
  end
end
puts(grade(85))

findパターン

findパターン[*, x, *]は、両端にスプラットを置いて、配列のどこにでも存在するサブパターンを検索します。

case [1, 2, 3, 4]
in [*, 3, *]
  puts 'contains a 3'
end

find内での束縛

findパターンでマッチした要素を束縛し、見つかった値を取り込めます。

case [10, 20, 30]
in [*, x, *] if x > 25
  puts("found #{x}")
end

周囲の要素を取り込む

findパターンの両方のスプラットに名前を付けると、マッチの前後にある要素を取り込めます。

case [1, 2, 99, 4, 5]
in [*before, 99, *after]
  p before
  p after
end

型付き要素の検索

findパターンと型パターンを組み合わせると、指定した型の最初の要素を検索できます。

case [1, 'hi', 2]
in [*, String => word, *]
  puts(word)
end

ガードとパターン

構造として表現できるものはパターンで表し、数値比較やメソッド呼び出しなど、パターンで表現できない条件に限ってガードを使用します。

case { role: 'admin', age: 40 }
in { role: 'admin', age: } if age >= 18
  puts 'adult admin'
end

findとガードの組み合わせ

findパターンとガードを組み合わせると、「この条件を満たす要素が存在するか」を調べられます。

numbers = [3, 5, 8, 11]
case numbers
in [*, n, *] if n.even?
  puts("first even-ish hit: #{n}")
end

分岐の順序

分岐は上から下へ試され、最初にマッチした分岐が選ばれます。より具体的なガード付きパターンを、一般的なパターンより前に置いてください。

case 100
in Integer => n if n > 50 then puts 'big'
in Integer then puts 'small'
end

確認問題

findパターン[*, x, *]は何をしますか。

まとめ:findパターンとガード

マッチングに条件と検索を追加しました。

  • ガードif / unlessでパターンを絞り込めます
  • ガードでは束縛された変数を使用できます
  • findパターン[*, x, *]はどこにでも存在する要素を検索します
  • 両方のスプラットに名前を付けて周囲の要素を取り込めます
  • 最初にマッチした分岐が選ばれるため、順序が重要です
case [1, 7, 3]
in [*, x, *] if x > 5 then puts x
end

よくある質問

「Find パターンとガード」レッスンは無料ですか?

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

「Find パターンとガード」で何を学びますか?

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

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

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

「Find パターンとガード」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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