#はじめに
はじめまして!
今回は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以外の処理がない
以上の条件を満たす時に使用できます。
お疲れ様でした(^_^)
#この記事を読んでくれた方へ
「ここがおかしい」や「もっとこう書いた方がいいよー」など意見がございましたら、御手数ですがコメントなどで、ご指摘いただければ幸いです。
よろしくお願いします!!