search
LoginSignup
8

More than 3 years have passed since last update.

posted at

updated at

Organization

eachをmapに変換し、コードを簡潔にしよう!

はじめに

はじめまして!
今回はeachをmapに置き換えてコードをより簡潔にしようと思います。
mapってどんなメソッド?って方はこちら

バージョン

Ruby 2.4.0

実際にやってみよう

今回は以下のコードを簡潔にしてみようと思います!


numbers = [1,2,3,4,5,6]
str_numbers = []
numbers.each do |n|
  str_numbers << n.to_s
end
p str_numbers

#出力結果
["1", "2", "3", "4", "5", "6"]

mapを使って簡潔にしてみよう

numbers = [1,2,3,4,5,6]
str_numbers =  numbers.map do |n|
                 n.to_s
               end
p str_numbers
#出力結果
["1", "2", "3", "4", "5", "6"]

ワンライナーでかいてみよう

do...endの代わりに{}でもブロックが作れるため以下のような書き方ができる。

numbers = [1,2,3,4,5,6]
str_numbers = numbers.map { |n| n.to_s }
p str_numbers

#出力結果
["1", "2", "3", "4", "5", "6"]

ワンライナーで以下のようにも書ける。

numbers = [1,2,3,4,5,6]
str_numbers = numbers.map do |n| n.to_s end
p str_numbers
#出力結果
["1", "2", "3", "4", "5", "6"]

ただワンライナーで書く場合、⓶は読み辛いので⓵の書き方をお勧めします。

&とシンボルを使って更に簡潔に

numbers = [1,2,3,4,5,6]
str_numbers = numbers.map(&:to_s)
p str_numbers

#出力結果
["1", "2", "3", "4", "5", "6"]

最終的にここまで簡潔にすることができました( ̄∀ ̄)
&:を使用するときの注意点(mapメソッド使用時)


1.ブロック引数が1つのみ
  #今回のケース: ブロック引数はnのみ
2.ブロックの中で呼び出すメソッドに引数がない
 #今回のケース: to_sメソッドに引数がない
3.ブロック引数に対して呼び出すメソッドは1回
 #今回のケース: s.to_s以外の処理がない

以上の条件を満たす時に使用できます。
お疲れ様でした(^_^)

この記事を読んでくれた方へ

「ここがおかしい」や「もっとこう書いた方がいいよー」など意見がございましたら、御手数ですがコメントなどで、ご指摘いただければ幸いです。
よろしくお願いします!!

参考文献

rubyのeach,mapの違い
プロを目指す人のためのRuby入門
rubyリファレンス

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8