変数の値→5 変数の値→8 変数の値→11 変数の値→14 変数の値→17
カウントアップする変数の増減する間隔を指定してループする方法(step)
times, upto, downto では、ループする際に変数は必ず 1 ずつカウントアップ(またはカウントダウン)しますが、 step を使用するとカウントアップ(カウントダウン)する間隔を指定することができます。
書式
書式は2通りありますが、いずれも同じ動作をします。
書式1 | |
1 2 3 4 5 6 | # 変数は省略可能。 開始値.step(終了値, 間隔) { |変数| 実行する処理1 実行する処理2 : } |
書式2 | |
1 2 3 4 5 6 | # 変数は省略可能。 開始値.step(終了値, 間隔) do |変数| 実行する処理1 実行する処理2 : end |
変数の増加する間隔を指定してカウントアップする
次のサンプルコードでは、変数の値を 5 から開始して 3 ずつカウントアップし、変数が 17 以下の間ループします。
ruby(実行可能なサンプルコード) | |
1 2 3 4 | # 5 から開始して 3 ずつカウントアップし変数が 17 以下の間ループ 5.step(17, 3) { |i| puts "変数の値→#{i}" } |
上記の実行結果は次の通りです。
変数をカウントアップした値が終了値と一致しない場合、変数の値が終了値以下の場合はループし、変数の値が終了値を超えるとループは実行されず終了します。
次のサンプルコードでは、変数の値を 5 から開始して 5 ずつカウントアップし、変数が 17 以下の間ループします。変数の値は 15 までカウントアップしてループしますが、その次の 20 は終了値の 17 を超えている為、ループは実行されません。
ruby(実行可能なサンプルコード) | |
1 2 3 4 | # 5 から開始して 5 ずつカウントアップし変数が 17 以下の間ループ 5.step(17, 5) { |i| puts "変数の値→#{i}" } |
上記の実行結果は次の通りです。
変数の値→5 変数の値→10 変数の値→15
変数の減少する間隔を指定してカウントダウンする
次のサンプルコードでは、変数の値を 20 から開始して 3 ずつカウントダウンし、変数が 11 以上の間ループします。
ruby(実行可能なサンプルコード) | |
1 2 3 4 | # 20 から開始して 3 ずつカウントダウンし変数が 11 以上の間ループ 20.step(11, -3) { |i| puts "変数の値→#{i}" } |
上記の実行結果は次の通りです。
変数の値→20 変数の値→17 変数の値→14 変数の値→11
変数をカウントダウンした値が終了値と一致しない場合、変数の値が終了値以上の場合はループし、変数の値が終了値を下回るとループは実行されず終了します。
次のサンプルコードでは、変数の値を 20 から開始して 5 ずつカウントダウンし、変数が 11 以上の間ループします。変数の値は 15 までカウントダウンしてループしますが、その次の 10 は終了値の 11 を下回る為、ループは実行されません。
ruby(実行可能なサンプルコード) | |
1 2 3 | # 20 から開始して 5 ずつカウントダウンし変数が 11 以上の間ループ 20.step(11, -5) { |i| puts "変数の値→#{i}" |
上記の実行結果は次の通りです。
変数の値→20 変数の値→15
開始値や終了値がマイナスの値のサンプルコード
開始値や終了値にはマイナスの値を設定することができます。サンプルコードは次の通りです。
ruby(実行可能なサンプルコード) | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | puts "◆開始値がマイナス" # -5 から開始して 3 ずつカウントアップし変数が 4 以下の間ループ -5.step(4, 3) { |i| puts "変数の値→#{i}" } puts "◆終了値がマイナス" # 5 から開始して 3 ずつカウントダウンし変数が -4 以上の間ループ 5.step(-4, -3) { |i| puts "変数の値→#{i}" } |
上記の実行結果は次の通りです。
◆開始値がマイナス 変数の値→-5 変数の値→-2 変数の値→1 変数の値→4 ◆終了値がマイナス 変数の値→5 変数の値→2 変数の値→-1 変数の値→-4