for文とeachの違いってなんなん?
最近コードレビューをしていて、for文を使っているコードを読んだときに、「Rubyだったらeach使いなよ」とレビューしてました。
Rubyだったらeach
。お決まりのように考えていたのですが…なんで?
違い
結論から言うと、for文
は配列の要素を受け取る変数、for文の中で作成したローカル変数がfor文
の外でも扱うことができるということ
each文
numbers = [1, 2, 3, 4] sum = 0 numbers.each do |n| sum += n sumsum = sum += n end irb(main):014:0> sum => 10 irb(main):025:0> sumsum NameError: undefined local variable or method `sumsum' for main:Object from (irb):25 from /Users/kei/.rbenv/versions/2.4.1/bin/irb:11:in `<main>'
for文
numbers = [1, 2, 3, 4] sum = 0 for n in numbers sum += n sumsum = sum += n end irb(main):016:0> n => 4 irb(main):017:0> sum => 10 irb(main):018:0> sumsum => 10
for文の外でも使えてる!
なぜかも説明できないのに「そういうもんだから」っていうのはだめだなぁ…と感じました。もっと勉強しよ。