Ruby/Rails: Enumerable の便利な述語メソッド

Pocket

こんにちは、鈴木です。

 

Ruby のコレクションクラスは Enumerable モジュールを include しています。

そして、Enumerabule モジュールにはコレクションを扱う上で非常に便利なメソッドが数多く提供されています。

今回はその中から、コレクションの中に「特定の条件を満たす要素が存在するかどうか」を判定する述語メソッドをまとめます。

 

便利な述語メソッド

Enumerable#any? を筆頭に、コレクションに対して「条件を満たす要素はあるのか?」、「いくつあるのか?」を判定するメソッドには以下のものがあります。

メソッド 説明
all? 全ての要素が条件を満たす場合に true。要素が 0 の場合も true。
none? 条件を満たす要素が 1 つも存在しない場合に true。要素が 0 の場合も true。
any? 条件を満たす要素が 1 つ以上存在する場合に true。要素が 0 の場合は false。
one? 条件を満たす要素が 1 つだけある場合に true。
many? 条件を満たす要素が 2 つ以上ある場合に true。このメソッドは ActiveSupport で定義されています。

many? だけは ActiveSupport で定義されていることに注意しましょう。

 

使用例

上記メソッドはブロックを指定した場合はブロックの戻り値、そうでない場合はコレクションの要素の真偽によって判定します。

all? を例に使い方を見てみましょう。

まずはブロックを指定しない場合です。

次にブロックを指定する場合です。

他のメソッド(none?, any?, one?, many?)の使い方も同様です。

 

コレクションが空の場合

コレクションが空の場合の結果は以下のようになります。

慣れないうちは「コレクションが空の場合の戻り値はなんだっけ?」となることがあるので、きちんと把握しておきましょう。

 

まとめ

今回は「述語メソッド」という切り口で見てきましたが、Enumerable には便利なメソッドが多数存在します。

別の機会にそれらのメソッドもご紹介したいと思います。

 

Pocket

Comments are closed, but you can leave a trackback: Trackback URL.