RubyのEnumerableモジュールとは?便利な繰り返し処理を一気に習得!
Rubyには、配列やハッシュ、範囲オブジェクトなどで使える便利なメソッドが多数あります。
これらのメソッドは、Enumerable(イナマラブル)モジュールによって提供されています。
Enumerableを使えば、検索・抽出・集計・変換などの処理が簡単にでき、繰り返し処理のコードをすっきり書けます。
Enumerableとは?
Enumerableは、繰り返し処理に関するメソッドを集めたモジュールです。
Rubyの配列やハッシュ、範囲(Range)などに含まれており、each
メソッドが定義されていれば自動で利用できます。
主なメソッド一覧
メソッド名 | 説明 |
each | 要素を順に処理 |
map | 要素を変換して新しい配列を返す |
select | 条件に合う要素を抽出 |
find | 最初に条件に合う要素を返す |
any? | いずれかが条件に合えばtrue |
all? | すべてが条件に合えばtrue |
none? | すべて合わなければtrue |
count | 要素数や条件に合う数を返す |
inject | 累積計算(合計・積など) |
使用例:map / select / find
nums = [1, 2, 3, 4, 5]
squares = nums.map { |n| n * n } # → [1, 4, 9, 16, 25]
evens = nums.select { |n| n.even? } # → [2, 4]
first_odd = nums.find { |n| n.odd? } # → 1
このように、短く簡潔にデータ処理ができるのがEnumerableの魅力です。
inject(reduce)の使い方
total = [1, 2, 3, 4].inject(0) { |sum, n| sum + n }
puts total # → 10
inject
は、累積しながら計算を行う高機能なイテレータです。
reduce
は同じ機能の別名です。
any? / all? / none?
nums = [1, 2, 3, 4]
puts nums.any? { |n| n > 3 } # → true
puts nums.all? { |n| n < 5 } # → true
puts nums.none? { |n| n < 0 } # → true
条件判定に使える便利なメソッドも多数用意されています。
Enumerableを自作クラスで使う
class Team
include Enumerable
def initialize(members)
@members = members
end
def each
@members.each { |m| yield m }
end
end
team = Team.new(["Alice", "Bob", "Carol"])
puts team.find { |name| name.start_with?("B") } # → Bob
Enumerable
を使いたい場合、自作クラスに include Enumerable
を書き、eachメソッドを定義すればOKです。
まとめ
RubyのEnumerableモジュールは、繰り返し処理を強力にサポートするツールです。
配列やハッシュに標準で組み込まれており、map
や select
などの便利なメソッドがすぐに使えます。
自作クラスでも each
を定義して include Enumerable
すれば、これらの便利メソッドを活用できます。
ぜひ、日々のコードに取り入れてみてください!