はじめに
先輩から、eachメソッドとmapメソッドは、開発現場で頻繁に使用されている
と聞き、今回それぞれの基本を初学者の自分なりにまとめてみました。プログラミング初心者の方、Rubyを学習し始めた方達のお役に立てたら幸いです。
結論
eachメソッドとmapメソッドの違いは、その戻り値にあります。
eachメソッド
eachメソッドは、一言でいうと「配列の要素を最初から最後まで順番に取り出すメソッド」です。取り出した要素をどう取り扱うかは、そのあとのブロックに記述されています。ブロックは、以下のコードだとdoからend
までです。
nums = [1, 2, 3, 4, 5]
result = nums.each do |n|
puts n
end
# 出力
# 1
# 2
# 3
# 4
# 5
# resultの値
#=> [1, 2, 3, 4, 5]
配列の各要素がnとして取り出され、puts n
によって出力されています。
mapメソッド
mapメソッドも、ブロックを使用します。 eachメソッドとの違いは、mapメソッドは繰り返し処理の後、配列にして返してくれることです。 例えば、以下のように、配列の各要素を2倍にし、新しい配列を作るコードがあったとします。
nums = [1, 2, 3, 4, 5]
new_nums = []
nums.each { |n| new_nums << n * 2 }
new_nums
# => [2, 4, 6, 8, 10]
上記のeachメソッドの場合だと、空の配列を用意して、他の配列をループ処理した結果を埋め込んでいます。このようなコードは、以下のmapメソッドに置き換えが可能です。
nums = [1, 2, 3, 4, 5]
new_nums = nums.map { |n| n * 2 }
new_nums
# => [2, 4, 6, 8, 10]
空の配列を用意する必要がなくなりました。
しかし、空の配列を用意することで、「これがメソッドの戻り値ですよ!」という意図がより明確になる場合もあるため、使い所を見極める必要がありそうです。
おわりに
今回は、Rubyのeachメソッドとmapメソッドの基本的な使い方を初学者の自分なりにまとめてみました。
Rubyを学習中の方達に、少しでもお役に立てたら幸いです!
コメントもお待ちしております(教えてください!笑)
参考