Ruby 繰り返し処理をやり直したいときに使えるredo

Rubyの便利な書き方だなと思って記事にしました。

 

まずは、行ったことがありますか?の回答に「ある」となるまで処理を繰り返します。

areas = ['東京', '北海道', '沖縄']
areas.each do |area|
  # sampleでランダムに選択
  answer = ['ある', 'ない'].sample
  puts "#{area}に行ったことありますか?#{answer}"
  redo unless answer == 'ある'
end
# => 東京に行ったことありますか?ない
# => 東京に行ったことありますか?ない
# => 東京に行ったことありますか?ない
# => 東京に行ったことありますか?ある ★次に行く
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ある ★次に行く
# => 沖縄に行ったことありますか?ある ★次に行く

「ある」となったときに次のareaに移っていますね。

次に上記の書き方だと永遠と続く可能性もあります。
回数制限を設けたのが以下の例になります。

areas = ['東京', '北海道', '沖縄']
count = 0
areas.each do |area|
  count += 1
  answer = 'ない'
  puts "#{area}に行ったことありますか?#{answer}"
  redo if answer != 'ある' && count < 2 count = 0 end # => 東京に行ったことありますか?ない
# => 東京に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 北海道に行ったことありますか?ない
# => 沖縄に行ったことありますか?ない
# => 沖縄に行ったことありますか?ない

「ある」とあるまで処理をやり直すのですが2回未満までとなっているので

2回ずつ処理をして終わっていますね。

 

何か参考になれば幸いです(*^^*)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA