🦔

Rubyのeachとmapの違いを理解しよう

2023/11/10に公開

はじめに

Rubyには多くの便利なイテレータメソッドがありますが、eachとmapは最もよく使用されるメソッドの二つです。これらのメソッドは似ているように見えますが、実際には異なる目的で使用されます。この記事では、eachとmapの機能的な違いについて解説し、各メソッドの使用例をいくつか紹介します。

eachメソッド

eachは、配列やハッシュなどのコレクションの各要素に対して、指定されたブロック内のコードを実行するメソッドです。eachを使用すると、元のコレクションは変更されず、常にそのコレクション自体が返されます。

使用例:

[1, 2, 3].each do |n|
  puts n
end
# 出力結果:
# 1
# 2
# 3
# 返り値は元の配列: [1, 2, 3]

この例では、配列の各要素を標準出力に印刷しています。しかし、返り値は変更されず、元の配列がそのまま返されます。

mapメソッド(別名: collect)

mapメソッドは、eachメソッドと同じようにコレクションの各要素に対してブロックを実行しますが、それぞれの要素に対するブロックの実行結果を新しい配列にして返します。mapは、元のコレクションを変更せずに、それを何らかの形で変換したい場合に使われます。

使用例:

new_array = [1, 2, 3].map do |n|
  n * 2
end
# => [2, 4, 6]

この例では、配列の各要素を2倍にして新しい配列を作成しています。

結論

eachメソッドは、副作用(例えば出力やデータの変更)を目的とした場合に使うのに対し、mapメソッドはコレクションを変換して新しい配列を作り出すために使用します。どちらのメソッドも有用ですが、使用するシナリオに応じて適切なメソッドを選ぶことが重要です。

この記事がRubyのeachとmapの違いを理解し、より効果的なコードを書く助けになれば幸いです。どのメソッドを使うべきか判断する際は、目的を明確にして選択しましょう。

Discussion