この記事で学べる知識:繰り返しの制御
この記事の練習問題を解くために必要な知識:
基礎文法(レッスン1)、比較演算子と論理演算子、if文による分岐処理、case文による分岐処理、for文による繰り返し処理、while文による繰り返し処理、until文による繰り返し処理、繰り返しの制御
<<前のページ | Ruby記事一覧 |
次のページ>> |
Rubyの「繰り返しの制御」とは
この章ではRubyにおける「繰り返しの制御」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。
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を活用しよう
forループを使って1から10までの数を繰り返し処理し、繰り返しの途中で特定の数に応じて処理を制御するプログラムを作成しましょう。
8の時点でループを終了し、3の倍数の場合は「次の数に進む」メッセージを表示してその繰り返しだけをスキップしてください。
制御構造の「break」と「next」を使って、ループ内での条件処理を学びましょう。
この問題の要件
以下の要件に従ってコードを完成させてください。
- forループで1から10までの数を繰り返し処理すること。
- 繰り返し処理の中で以下の条件を適用すること:
i
が8のとき、ループを終了すること(breakを使用)。i
が3の倍数のとき、「○は3の倍数です。次の数に進みます。」というメッセージを表示し、その繰り返しをスキップすること(nextを使用)。
- 条件に当てはまらない数値については、「現在の数値: ○」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
現在の数値: 1 現在の数値: 2 3は3の倍数です。次の数に進みます。 現在の数値: 4 現在の数値: 5 6は3の倍数です。次の数に進みます。 現在の数値: 7
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:forループを1から10まで繰り返すように設定
□ if文でiが8かどうかを判定
□ □ 真の場合、breakでループを終了
□ elsif文でiが3の倍数かどうかを判定
□ □ 真の場合、メッセージ「#{i}は3の倍数です。次の数に進みます。」を表示
□ □ nextで次のループに進む
□ 現在の数値「#{i}」を表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 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
以上がこの問題の穴埋めコードです。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
# 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
正解コードの解説
今回作成したコードは「1から10までの数を順に処理し、特定の条件で処理をスキップまたは終了する」という内容です。
これにより、繰り返し処理や条件分岐の基本的な使い方を学ぶことができます。
コードをブロックごとに見ていきましょう。
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記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。