Rubyで一定の間隔で数値を増やす繰り返し処理をしたいことがあります。
そんなとき便利なのが step メソッドです。step メソッドは整数、浮動小数、Date などいろいろの場面で使えるようになっています。
stepメソッドの使い方
stepメソッドは、以下のような書式で記述します。オブジェクトに数値間隔を足した値が引数に渡され、リミットを越えない回数繰り返されます。
第2引数を省略するとデフォルト値として、1が指定されます。
1 2 3 |
オブジェクト.step(リミット, 数値間隔){|引数| 処理内容 } |
サンプル
以下は、1からはじまり、10を越えない値まで2ずつ加算されていきます。
1 2 3 |
1.step(10, 2) do |x| print x end |
結果は「13579」となります。
stepメソッドで日付を一定間隔で作る
2016年4月3日を起点として、t + 5 (5日後)まで1日ずつ加算された日付を表示するサンプルです。
1 2 3 4 5 6 |
require 'date' t = Date.new(2016, 4, 3) t.step(t + 5, 1) do |day| puts day end |
結果は以下のとおりです。
1 2 3 4 5 6 |
2016-04-03 2016-04-04 2016-04-05 2016-04-06 2016-04-07 2016-04-08 |
stepメソッドでサインカーブを描く
stepメソッドを応用してサインカーブを描くサンプルです。
1 2 3 4 5 6 |
0.step(2 * Math::PI, Math::PI / 6.0) do |th| 0.step(Math.sin(th)*20.to_i + 20) do |x| print " " end puts "x" end |
0を始点として2π(2 * Math::PI)までをπ / 6 おきに発生させています。そのおのおのをthとしています。
さらに、2行目からのstepメソッドでは、与えられたthのもとに、0を起点としてsin(th) * 20 + 20 までprint “ “ によって、横方向に空白文字を表示(位置をづらす)しています。20というのは画面で適当な大きさ・位置にするためのものです。
なお|x|で1回ごとの位置が出ますが使っていません。
画面内の所定の位置まで表示位置が移動したら5行目で”x”を表示します。
結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
x x x x x x x x x x x x x |
stepを使うとほかの方法よりすっきりとプログラムを書けることがあります。その他、SQLite3、Databaseクラスなどにもstepが用意されています。