Integer#timesはInteger#stepの特別なケース
http://d.hatena.ne.jp/piyo2-moko/20080306#1204811429
5.times{ print"momo?\n" }
を「five times { 処理 }」と英語読みできるところに美しさを感じてほしい。字面の通り「5回処理する」と読める。whileループでも書けるけど、絶対こっちのが読みやすい。
ループ系ブロック付きメソッド三兄弟は、
「M.times{|i| 処理 }」:0〜M-1の範囲で1ずつ増加(だからM回の繰り返しということになる)
↓
「M.upto(N){|i| 処理 }」:M〜Nの範囲で1ずつ増加
↓
「M.step(N,S){|i| 処理 }」:M〜Nの範囲でSずつ増加
の順番に汎用化していく。
一番最初に覚えたループ系のブロック付きメソッドがInteger#stepだったから難しく感じたのかも…
ブロックというのは「{|ブロック引数| 処理}」や「do |ブロック引数| 処理 end」のことね。2通りの書き方があるが意味は同じ。ブロック引数は使わないときは省略可能だ。