Rubyのstepを使って繰り返し処理を実行する
Rubyで繰り返し処理をする方法はいくつかありますが、回数を指定して繰り返し処理を書きたいときはstepを使うと便利です。
たとえば、5回実行したいときはこんな感じ。1.step(5)
とすることで、1から始まって5まで繰り返してくれます。
ブロックの{ |n| puts n }
ではn
にカウントアップした数値が入っているのでそれを使えます。
今回はただputsで表示しているだけ。
1.step(5) { |n| puts n }
こんな感じで出力されます。
irb(main):001:0> 1.step(5) { |n| puts n }
1
2
3
4
5
=> 1
これだけだとあんまり便利な気がしないですね。stepは二番目の引数にカウントアップの単位を指定することができます。
たとえば0.step(100, 5)
とすると、0から5刻みで100まで繰り返し処理を実行してくれます。繰り返しの回数は20回で、ブロック引数には5ずつ足し込まれた値が入ってくる形ですね。
eachとかwhileでやると自分で変数とか用意しないといけないですが、stepを使うとその必要がなくなります。
irb(main):003:0> 0.step(100, 5) { |n| puts n }
0
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
=> 0
さらに、stepは日付でも可能です。これがかなり便利です。
以下の例は2022年1月1日から始まって、20日刻みで今日の日付までカウントアップする例です。
今日の日付がピッタリと20日刻みにハマらないときは、その手前までが対象になります。
Date.new(2022, 1, 1).step(Date.current, 20) { |d| puts d }
2022-01-01
2022-01-21
2022-02-10
2022-03-02
2022-03-22
2022-04-11
2022-05-01
2022-05-21
2022-06-10
2022-06-30
2022-07-20
2022-08-09
2022-08-29
2022-09-18
2022-10-08
2022-10-28
2022-11-17
2022-12-07
2022-12-27
2023-01-16
=> Sat, 01 Jan 2022
eachとかでやってもできますが、より読みやすいコードを書くことができる場合があるので、コードを書くときは使い所を探りながらやっていきたいです。
この記事の環境情報
- Ruby 3.1.2
- メガネ(本体)を新調したい
Rubyに関する他の記事を読む
- slimでtype='application/ld+json'のscriptタグを書く
- Slack APIによる自動メッセージでユーザーグループにメンションする方法
- RubyでUnixtimeからTimeオブジェクトを生成する
- gemインストール時にUndefined symbols for architecture arm64と出たときの対応
- RubyでUTCの時刻情報をJST基準に変換する
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら