break, next, redoの違い

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

繰り返しの中で、ループ処理を中断したり、特定の回のループを飛ばしたりする場合は、break, next, redoなどを使います。

スポンサーリンク

break
繰り返しを中断して、ループを抜ける。

next
現在の回を飛ばして、次の回のループに移る。

redo
同じ条件で、ループをやり直す。

breakについては、処理を中断しループ脱出するだけですので、簡単なので理解しやすいです。
Rubyのbreak, nextは、PHPやCで言うところの、break, continueに、またPerlのlast, nextと同じです。
分かりにくいのは、nextとredoの違いです。

nextはループ処理を先頭に戻すのですが、その処理をブロック外の条件評価のところからはじめます。
一方で、redoの場合、次の回が、ブロック内の先頭の部分からはじまりますので、ループ条件評価は行われません。
redoの場合、同じ条件において、ブロック内の繰り返し処理をやり直す、ということになります。

array = ['Ruby', 'Perl', 'PHP', 'Python', 'JavaScript', 'C++', 'Java']
 
puts "----- break ------"
count = 0
array.each{ |item|
    count += 1
    if count == 3
        break
    end
    print count, " : ", item, "\n"
}
 
puts "\n----- next ------"
count = 0
array.each{ |item|
    count += 1
    if count == 3
        next
    end
    print count, " : ", item, "\n"
}
 
puts "\n----- redo ------"
count = 0
array.each{ |item|
    count += 1
    if count == 3
        redo
    end
    print count, " : ", item, "\n"
}

実行結果。

----- break ------
1 : Ruby
2 : Perl
 
----- next ------
1 : Ruby
2 : Perl
4 : Python
5 : JavaScript
6 : C++
7 : Java
 
----- redo ------
1 : Ruby
2 : Perl
4 : PHP
5 : Python
6 : JavaScript
7 : C++
8 : Java

nextの場合、「count == 3」の時のループ処理が飛ばされて、配列の値「’PHP’」も飛ばされています。
しかし、redoでは、「count == 3」から1つカウントアップされた後、同じ条件で繰り返し処理をやり直すので、配列の値「’PHP’」が表示されています。

スポンサーリンク
 
スポンサーリンク