Enumerable は、コレクションのトラバーサル、検索、操作のための豊富なメソッドセットを提供するモジュールです — map、select、reduce、、 など多くのメソッドがあります。配列、ハッシュ、範囲、および を定義する任意のクラスがこれらすべてのメソッドを取得します。Ruby のエレガントで関数型のデータ処理の中核です。
findgroup_byeach[1, 2, 3, 4, 5]
.select { |n| n.even? } # filter → [2, 4]
.map { |n| n * 10 } # transform → [20, 40]
[1, 2, 3, 4].reduce(0) { |sum, n| sum + n } # 10 — fold/accumulate (also .sum)
[1, 2, 3, 4].find { |n| n > 2 } # 3 — first match
[1, 2, 3, 4].all? { |n| n > 0 } # true
[1, 2, 3, 4].any? { |n| n > 3 } # true
[1, 2, 3, 4].count { |n| n.even? } # 2
[3, 1, 2].sort; [3, 1, 2].min; [3, 1, 2].max
[1, 2, 3].each_with_index { |val, i| ... }
words.group_by { |w| w.length } # group into a hash by a key
[1, 2, 3, 4].partition { |n| n.even? } # [[2,4], [1,3]] — split by condition
[1, 2, 3].each_slice(2).to_a # [[1,2],[3]] — chunks
Enumerable は、フィルタリング、変換、集約、検索、グループ化、チャンキング用の数十の表現力豊かなメソッドを提供し、ほぼすべてのコレクション操作をカバーし、クリーンなデータパイプラインのために連鎖可能です。
{ a: 1, b: 2 }.select { |k, v| v > 1 } # hashes are Enumerable → { b: 2 }
(1..100).map { |n| n * 2 } # ranges are Enumerable
class TodoList
include Enumerable # mix in Enumerable...
def initialize = @items = []
def each(&block) # ...just define `each`...
@items.each(&block)
end
# ...and you get map, select, reduce, find, sort, etc. FOR FREE!
end
list = TodoList.new
list.select { |item| item.done? } # works! — Enumerable provides it via your `each`
エレガントな部分:include Enumerable して each だけを定義すると、あなたのクラスは自動的に Enumerable のすべてのメソッド(map、select、reduce など)を獲得します。
Enumerable モジュールは Ruby のエレガントで表現力豊かなデータ処理スタイルの中核であり、それを理解することは生産的でイディオマティックな Ruby に不可欠です。
コレクションを操作するための豊かで包括的なメソッドセット(map、select、reduce、find、group_by、partition、all?、any? など数十個)を提供します — そしてこれらのメソッドは配列、ハッシュ、範囲で常に使用するもので、Ruby のデータ操作を簡潔で読みやすくします(詳細なループを書く代わりに表現力豊かな操作を連鎖させます)。
Enumerable のメソッドをマスターすることは、流暢で関数型スタイルの Ruby を書くための鍵です — これはデータをエレガントにフィルタリング、変換、集約、検索、グループ化する方法です。
組み込みコレクションでこれらのメソッドを使用する以外に、Ruby の重要で独特な機能があります — あなた独自のクラスを Enumerable にできます:include Enumerable して each メソッドだけを定義することで、あなたのクラスは自動的に Enumerable のすべてのメソッド(map、select、reduce など)を獲得します — これは Ruby のミックスイン設計の強力なデモンストレーションであり、配列のように動作するカスタムコレクションクラスを構築するための実用的なツールです。
Enumerable を理解すること — メソッドの豊かさ(Ruby の表現力豊かなデータ処理の基礎)、配列/ハッシュ/範囲がすべてそれを含むこと、each を定義してカスタムクラスを Enumerable にする方法 — は重要で頻繁に適用される知識であり、イディオマティックな Ruby を書くための中核です。
Enumerable メソッドを使用したデータ処理は Ruby(および Rails)で遍在しており、include Enumerable + each パターンは Ruby のミックスインパワーのエレガントな例であるため、Enumerable をマスターすることは効果的でイディオマティックな Ruby 開発の基礎であり、言語の表現力豊かなコレクション処理への流暢性を反映する一般的なトピックです。