はじめに
一定回数リトライして、ダメだったらエラーにする、みたいな処理はよくある。
loop
num = 0 loop do num += 1 puts num break if num == 3 end
結果は
MacBook-Air:loop take$ ruby loop.rb 1 2 3
まぁ、普通のloopだ。インクリを自分で書くところがイケてない。
while
num = 1 while num <= 3 do puts num num += 1 end
結果は同様。終了条件をwhileで書ける分短くなるが、インクリを自分で書くところはイケてない。
for
for num in 1..3 do puts num end
rubyではforは使わないeachを使えって説はよく見るけど連続した数値オブジェクトの場合結構シンプルでアリかと思ってしまった。
times
3.times do |num| puts num+1 end
0からというところがイマイチ。
おわりに
だいたい既定回数になるときまで失敗するとraiseするようなコードを書くことが多い。(それまではrescueで拾ってretryする)その場合、timesを使うと、3にtimesをまわした場合、numが2のときにraiseしなければならない。この1差はイケてない。
そう考えると以下のようにforで書くのがまだいいかなと思うんだけど、いかがでしょう。
max = 3 for num in 1..max do puts num if num == max raise "raise!" end end
MacBook-Air:loop take$ ruby for.rb 1 2 3 for.rb:5:in `block in <main>': raise! (RuntimeError) from for.rb:2:in `each' from for.rb:2:in `<main>'