RubyのEnumerableモジュールの力:繰り返し処理をシンプルに

RubyのEnumerableモジュールの力:繰り返し処理をシンプルに

RubyのEnumerableモジュールは、コレクションを操作するための豊富なメソッドを提供します。繰り返し処理を簡潔に記述できるだけでなく、コードの可読性と効率性を向上させます。本記事では、主要なメソッドとその活用方法を詳しく解説します。

Enumerableモジュールとは

Enumerableモジュールは、配列やハッシュなどのコレクションに共通の繰り返し処理メソッドを提供するモジュールです。ArrayやHashはこのモジュールをミックスインしています。

# Arrayクラスにミックスインされている例
puts [1, 2, 3].include?(2) # => true

eachの基本と拡張性

eachメソッドは、コレクションを繰り返し処理する基本的な方法です。他の多くのEnumerableメソッドも内部的にeachを利用しています。

[1, 2, 3].each { |n| puts n }

mapでコレクションを変換する

mapメソッドは、各要素に対して処理を行い、その結果を新しい配列として返します。

squared = [1, 2, 3].map { |n| n ** 2 }
puts squared # => [1, 4, 9]

selectで条件に合う要素を抽出する

selectメソッドは、ブロックの条件を満たす要素を抽出します。

evens = [1, 2, 3, 4].select { |n| n.even? }
puts evens # => [2, 4]

rejectで条件に合わない要素を除外する

rejectメソッドは、selectの反対で、条件を満たさない要素を返します。

odds = [1, 2, 3, 4].reject { |n| n.even? }
puts odds # => [1, 3]

findで最初に見つかった要素を取得する

findメソッドは、条件を満たす最初の要素を返します。

first_even = [1, 2, 3, 4].find { |n| n.even? }
puts first_even # => 2

all?で全ての要素が条件を満たすか確認する

all?メソッドは、全ての要素がブロックの条件を満たすかどうかを確認します。

all_positive = [1, 2, 3].all? { |n| n > 0 }
puts all_positive # => true

any?で少なくとも一つが条件を満たすか確認する

any?メソッドは、少なくとも1つの要素が条件を満たすかを確認します。

has_even = [1, 3, 5].any? { |n| n.even? }
puts has_even # => false

none?でどの要素も条件を満たさないか確認する

none?メソッドは、全ての要素が条件を満たさない場合にtrueを返します。

none_negative = [1, 2, 3].none? { |n| n < 0 }
puts none_negative # => true

group_byで要素をグループ化する

group_byメソッドは、ブロックの結果をキーとして要素をグループ化します。

grouped = [1, 2, 3, 4].group_by { |n| n.even? }
puts grouped # => {false=>[1, 3], true=>[2, 4]}

partitionで条件に合う要素を分割する

partitionメソッドは、条件を満たす要素と満たさない要素を分割します。

evens, odds = [1, 2, 3, 4].partition { |n| n.even? }
puts evens # => [2, 4]
puts odds  # => [1, 3]

reduceで要素を単一の値に畳み込む

reduceメソッド(別名inject)は、全ての要素を単一の値に畳み込みます。

sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sum # => 10

each_with_indexで要素のインデックスを取得する

each_with_indexメソッドは、要素とそのインデックスを一緒に処理します。

["a", "b", "c"].each_with_index { |val, idx| puts "#{idx}: #{val}" }

まとめ

Enumerableモジュールを活用することで、繰り返し処理の記述がシンプルになります。主要なメソッドを習得することで、効率的で可読性の高いRubyコードを実現できます。