【Ruby】レッスン2-07:breakとnextで繰り返し処理を制御しよう

50110130

一つ前のページではuntil文による繰り返し処理について学習しました。

今回は 繰り返しの制御 について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
 ・Lesson2-1:比較演算子と論理演算子を理解しよう
 ・Lesson2-2:if文による分岐処理を理解しよう
 ・Lesson2-3:case文による分岐処理を理解しよう
 ・Lesson2-4:for文による繰り返し処理を理解しよう
 ・Lesson2-5:while文による繰り返し処理を理解しよう
 ・Lesson2-6:until文による繰り返し処理を理解しよう
 ・Lesson2-7:繰り返しを制御しよう ◁今回はココ
 ・確認問題2-☆1:ハイアンドロー ゲームを作ろう
 ・確認問題2-☆2:数当てゲームを作ろう
 ・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:メソッド編
Lesson4:コレクション
Lesson5:オブジェクト指向編

<<前のページ

Rubyの記事一覧

次のページ>>

Rubyの繰り返し制御|breakとnextの基本と使い分け方

Rubyには繰り返し処理をより柔軟にするための「break」と「next」という制御構造があります。

これらを使うことでループの中で特定の条件が満たされた際にループを中断したり、スキップして次の繰り返しに進んだりすることができます。

本記事では「break」と「next」の基本的な使い方とその違いについて解説します。

breakでループを終了する方法

「break」は、現在実行中の繰り返し処理を即座に終了させるために使用されます。

「break」が実行されると、それ以降の繰り返し処理は行われず、ループから抜け出します。

例えば次のようなコードで「break」を使用します。

# 1から10までの数字を順に出力し、5でループを終了
(1..10).each do |i|
  if i == 5
    break  # iが5の時点でループを終了
  end
  puts i
end
# 出力結果: 1, 2, 3, 4

このコードでは、iが5になると「break」によりループが終了し、1から4までが出力されます。

「break」を使用することで、指定した条件に合致した際にループを終了させることができるため、不要な繰り返しを防ぎ効率的です。

nextで処理をスキップする方法

「next」は、現在の繰り返しの処理をスキップし、次の繰り返しに進むために使用されます。

「next」が実行されると、以降の処理はスキップされて次の繰り返しが始まります。

次の例で「next」の使い方を確認しましょう。

# 1から10までの数字を順に出力し、3の倍数をスキップ
(1..10).each do |i|
  if i % 3 == 0
    next  # iが3の倍数のときに次の繰り返しへ
  end
  puts i
end
# 出力結果: 1, 2, 4, 5, 7, 8, 10

このコードではiが3の倍数の場合、「next」により現在の繰り返しがスキップされます。したがって3, 6, 9は出力されません。

「next」を使うことで条件に応じて特定の繰り返しだけを無視し、ループを継続することができます。

breakとnextの違いを整理しよう

「break」と「next」の違いをまとめると、以下のようになります。

  • break:指定の条件を満たすとループ全体を終了します。
  • next:指定の条件を満たすとその繰り返しのみをスキップし、次の繰り返しに移ります。

「break」と「next」を使い分けることで、ループ内での柔軟な制御が可能になります。

特定の条件で処理を完全に終了させたい場合は「break」を、特定の条件をスキップして次の繰り返しに進みたい場合は「next」を使います。

まとめ:繰り返し制御のベストプラクティス

Rubyの「break」と「next」は、繰り返し処理を制御するために非常に便利な機能です。

どちらもループの動作をコントロールできますが、「break」はループを完全に終了させ、「next」は特定の繰り返しだけをスキップします。

プログラムの目的に応じて、適切な方法を使い分けましょう。

練習問題|breakとnextを使ったループ制御を体験しよう

繰り返しの制御をしっかりと身に着けるため、練習問題に挑戦しましょう。

breakとnextの活用|練習問題に挑戦!

forループを使って1から10までの数を繰り返し処理し、繰り返しの途中で特定の数に応じて処理を制御するプログラムを作成しましょう。

8の時点でループを終了し、3の倍数の場合は「次の数に進む」メッセージを表示してその繰り返しだけをスキップしてください。

制御構造の「break」と「next」を使って、ループ内での条件処理を学びましょう。

以下の要件に従ってコードを完成させてください。

  1. forループで1から10までの数を繰り返し処理すること。
  2. 繰り返し処理の中で以下の条件を適用すること:
    • iが8のとき、ループを終了すること(breakを使用)。
    • iが3の倍数のとき、「○は3の倍数です。次の数に進みます。」というメッセージを表示し、その繰り返しをスキップすること(nextを使用)。
  3. 条件に当てはまらない数値については、「現在の数値: ○」と表示すること。

ただし、以下のような実行結果となるコードを書くこと。

現在の数値: 1
現在の数値: 2
3は3の倍数です。次の数に進みます。
現在の数値: 4
現在の数値: 5
6は3の倍数です。次の数に進みます。
現在の数値: 7

【ヒント】自力で解くのが難しい人へ

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:forループを1から10まで繰り返すように設定
  □ if文でiが8かどうかを判定
  □ □ 真の場合、breakでループを終了
  □ elsif文でiが3の倍数かどうかを判定
  □ □ 真の場合、メッセージ「#{i}は3の倍数です。次の数に進みます。」を表示
  □ □ nextで次のループに進む
  □ 現在の数値「#{i}」を表示

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# forループで1から10までの数を繰り返し処理
=begin
【穴埋め問題1】
ここでfor文を使って1から10までの数を繰り返し処理するコードを書いてください。
=end
  if i == 8
    break  # iが8のときにループを終了
  elsif i % 3 == 0
=begin
    【穴埋め問題2】
    ここで3の倍数のときに「○は3の倍数です。次の数に進みます。」というメッセージを表示し、次のループに進むコードを書いてください。
=end
  end
  puts "現在の数値: #{i}"  # iの値を表示
=end

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

この問題の解答例と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
# forループで1から10までの数を繰り返し処理
for i in 1..10
  if i == 8
    break  # iが8のときにループを終了
  elsif i % 3 == 0
    puts "#{i}は3の倍数です。次の数に進みます。"  # 3の倍数のときにメッセージを表示
    next  # iが3の倍数のときに次のループへ
  end
  puts "現在の数値: #{i}"  # iの値を表示
end
Q
正解コードの解説

コードをブロックごとに分割して解説します。

forループの開始

for i in 1..10

for i in 1..10:この部分は、1から10までの数を順に取り出して変数iに代入し、繰り返し処理を行う「forループ」です。

1..10の部分は範囲演算子を使って1から10までの範囲を指定しています。

ループ内の条件分岐とbreak文

if i == 8
  break  # iが8のときにループを終了

if i == 8:この条件分岐は、iが8に達した時点で「break文」によりループを終了します。

breakは繰り返し処理を途中で終わらせるための命令です。これによりiが8以上には進まず、ループ全体が終了します。

3の倍数チェックとnext文

elsif i % 3 == 0
  puts "#{i}は3の倍数です。次の数に進みます。"  # 3の倍数のときにメッセージを表示
  next  # iが3の倍数のときに次のループへ

elsif i % 3 == 0:この部分は、iが3で割り切れるかどうかを判定する条件分岐です。

%は「剰余演算子」と呼ばれ、i % 3が0であればiは3の倍数ということになります。

next:3の倍数の場合、メッセージを表示した後にnextを使って次のループにスキップします。

nextはその後の処理を飛ばし、次の繰り返しへ進むための命令です。

ループ内での数値の表示

puts "現在の数値: #{i}"  # iの値を表示

この部分は現在の数値(変数i)を表示するためのコードです。

#{i}を使うことでiの値を文字列内に埋め込んで表示します。この行は3の倍数やiが8になるまでの数値を表示します。

まとめ

このプログラムではforループを使って1から10までの数を繰り返し処理し、特定の条件に基づいてループを制御する方法を学びました。

breakでループを終了させたり、nextで次のループにスキップすることで、効率的な処理が可能です。

繰り返し処理や条件分岐はプログラミングの基本であり、これを理解することで様々なロジックを構築することができます。

ぜひ、他の条件や数値で試してみて理解を深めてください!

<<前のページ

Rubyの記事一覧

次のページ>>

FAQ|breakとnextの使い方に関するよくある質問

Q
Q1. Rubyのbreakはどの種類のループでも使えますか?

はい、breakforループ、whileループ、untilループ、eachなどのイテレータ内でも使用できます。ループの種類に関係なく、特定の条件で繰り返し処理を中断したい場合に活用可能です。ただし、breakの使いどころを見誤ると、処理が途中で止まって意図しない挙動になることもあるため注意が必要です。

Q
Q2. Rubyでnextを使った後に実行される処理はどうなりますか?

nextを使った場合、次の繰り返しにスキップされるため、nextの後に記述された処理は一切実行されません。そのため、putsなどの表示処理や、変数の更新などがnextより後ろにあると、それらがスキップされてしまうことに注意しましょう。

Q
Q3. breakとnextは条件分岐と一緒に使うのが一般的ですか?

はい、ほとんどの場合、breaknextif文などの条件分岐と組み合わせて使用されます。条件が成立したときだけループから抜けたりスキップさせたりすることで、より柔軟で効率的なループ処理を実現できます。

記事URLをコピーしました