LoginSignup
2
2

Ruby ループ処理に対する break,retrun,nextの挙動

Last updated at Posted at 2023-08-19

調べた経緯

ワークにて、ループ処理をネスト(入れ子)にすることがあり、各制御構造について調べたのでここに記しておきます。
特に悩んだのはnextってなんだ? という疑問で、調べたのですが、検索結果はeach文に対するものが多く、理解するのに苦労しました。

あまり使用する機会はないかと思いますが、while文のループのネストで説明したいと思います。
これが理解できたことで、自分はeach文でのnextもなんとなく理解が深まりました。

各制御構造

  • break
    公式リファレンス
       break はもっとも内側のループを脱出

  • return
    公式リファレンス
       メソッド自体から抜ける。

  • next
    公式リファレンス 
      nextはもっとも内側のループの次の繰り返しにジャンプします。??
      

実際の挙動

このもっとも内側のループの次の繰り返しにジャンプが上手く理解できず色々と挙動を確認した。
※冒頭で述べたがeach文での説明が多い。

Ruby
#ループ1
while true
  puts "ループ1"
  #ループ2
  while true
    puts "ループ2"
    #ループ3
    while true
      puts "ループ3"
      n = gets.to_i
      if n == 1
        puts "続いてからループするよ"
      elsif n == 2
        puts "このループ内の残りの処理をスキップしてループ(3の頭に戻る)するよ"
        next
      elsif n == 3
        puts "このループからは抜けるよ"
        break
      else
        puts "すべてのループ(メソッド)を終わりにするよ"
        return
      end
      puts "ループ3の終わり"
    end

    puts "ループ2の終わり"
    break
  end

  puts "ループ1の終わり"
  return
end

前提として、起動すると、一番内側のループ3まで行きます。

  • 1を実行  処理なし
続いてからループするよ
ループ3の終わり
ループ3

if文を抜けて、ループ3の終端まで実行されたあと、while文のループが継続し、元の位置に戻ります。

  • 2を実行 next
このループ内の残りの処理をスキップしてループ(3の頭に戻る)するよ
ループ3

ループ3の終端までいかず、即座に3のループを再開しました。

  • 3を実行 break
このループからは抜けるよ
ループ2の終わり
ループ1の終わり

3のループを抜け、2の終端まで行き、2の終端にあるbreak文でさらに抜け、1の終わりまで到達しています。

  • 4(1と2と3以外) return
全てのループ(このメソッド)を終わりにするよ

3のループ内にいながら、2と1のループも全て実行されずに終了されました。

結論

breakはそのループのみから抜ける

ネスト(入れ子)なら内側のループから抜け,外のループに出る。

returnは、メソッド内の処理から抜ける

そのメソッド内で、ループの入れ子であろうが、処理は終了する

nextはそのループ内の残りの処理をスキップして現在のループ内の頭に戻る

その中の処理をスキップする、ループ自体は継続する

どうでしょうか? 初学者なりにまとめてみたつもりですが、誰かの参考に少しでもなれたなら幸いです。

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2