はじめに
よく使われるRubyの繰り返し処理や、個人的に便利そうだなと思うものをまとめていきます。
Rubyの繰り返し処理
each文
繰り返しの基本のeach文です。
Rubyでは、for文を使わずにこのeach文を使うことが多いです。
do ~ end までがブロックと呼ばれ、要素をどう扱うかが記述されます。
numbers = [1,2,3,4]
sum = 0
numbers.each do |n|
sum += n
end
sum #=>10
do ... end の省略
do ... endの代わりに { } で囲むことでもブロックを作ることが可能です。
1行でコンパクトに書きたいときなどに使える方法です。
numbers = [1,2,3,4]
sum = 0
numbers.each { |n| sum += n }
sum #=>10
###mapメソッド
各要素に対して、評価した結果を新しい配列にして返すことが出来ます。
numbers = [1,2,3,4]
new_numbers = numbers.map { |n| n*10 }
new_numbers #=> [10, 20, 30, 40]
###each_with_indexメソッド
each_with_indexを使うと、添字も取得可能です。
繰り返しもしつつ、添字も取得したいときに便利なメソッドです。
members = ["ichiro", "jiro", "saburo"]
members.each_with_index { |member, i| puts "#{i}: #{member}"}
#=> 0: ichiro
# 1: jiro
# 2: saburo
###with_indexメソッド
mapメソッドと組み合わせて使うことで、mapメソッドを繰り返し処理をしつつ
添字も同時に取得することが出来ます。
members = ["ichiro", "jiro", "saburo"]
new_members = members.map.with_index { |member, i| "#{i}: #{member}" }
new_members #=> ["0: ichiro", "1: jiro", "2: saburo"]
###添字を0以外から開始させる
each_with_indexやwith_indexで以外の数値で開始したいときは
メソッドに引数を渡すことで、指定することが可能です。
members = ["ichiro", "jiro", "saburo"]
new_members = members.map.with_index(1) { |member, i| "#{i}: #{member}" }
new_members #=> ["1: ichiro", "2: jiro", "3: saburo"]
###ブロックにメソッドを追加出来る
ブロックの後ろに別のメソッドを書くことが出来ます。
names = ["鈴木", "高橋"]
new_names = names.map { |name| "#{name}さん"}.join("と")
new_names #=> "鈴木さんと高橋さん"
#参考文献
プロを目指す人のためのRuby入門 伊藤 淳一 (著)
#さいごに
まだまだ知らない便利なメソッドがあるので
効率的なコードを書くためにこれからも学んでいきたいです。