redo文を使って現在の繰り返し処理をやり直す

while 文や for 文などの繰り返し処理の中で redo 文が実行されると現在の繰り返し処理を最初のところからやり直します。 next とは異なり次の繰り返し処理へ進むのではなく現在の繰り返し処理を最初からやり直す点にご注意ください。ここでは Ruby で redo 文を使って現在の繰り返し処理をやり直す方法について解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 18 日更新)

redo文の使い方

redo 文が実行されると、現在の繰り返し処理を最初からやり直します。ここで繰り返し処理とは次のいずれかです。

while文
until文
for文
イテレータ(each、times、upto、downto、step、loopなどのメソッド)

次の例では times メソッドを使った繰り返し処理の中で、取得した乱数の値が偶数だった場合は redo 文を使って繰り返し処理をやり直しています。

10.times{
  num = rand(9) + 1
  if num % 2 == 0 then
    redo
  end

  puts(num)
}

上記では 10 回繰り返しが行われるの中で 1 から 9 の乱数を取得し、偶数だった場合は乱数を取得しなおしています。次の繰り返し処理へ進むのではなく現在の繰り返しをやり直すので、繰り返し回数は 10 のままで結果として 10 個の奇数を取得できます。

なおやり直される繰り返しは現在実行している繰り返しです。

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

10.times{
  num = rand(9) + 1
  if num % 2 == 0 then
    redo
  end

  puts(num)
}

下記のように実行して下さい。

redo

-- --

Ruby で redo 文を使って現在の繰り返し処理をやり直す方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。