whileのループ処理を学ぼう

学習の目標

本章では、以下の内容を学習します。

  • whileループの基本的な使い方を理解する
  • 条件付きの繰り返し処理を実装できるようになる
  • breakを使ったループの制御方法を習得する
  • 無限ループの作り方と適切な抜け出し方を学ぶ

はじめに

プログラミングでは、同じ処理を何度も繰り返し実行する必要がよくあります。例えば、100人分のデータを処理したり、ユーザーが正しい値を入力するまで何度も入力を求めたりするような場合です。

前回の章では、配列の要素を順番に処理するためのeachメソッドについて学びました。これは特定のコレクション(配列やハッシュなど)の要素に対して繰り返し処理を行う場合に便利です。

今回学ぶwhileループは、より汎用的な繰り返し制御の仕組みです。「ある条件が真である間、処理を繰り返す」という形で使用します。特定の回数だけ処理を繰り返したい場合や、条件が満たされるまで処理を続けたい場合に便利です。

それでは、具体的な例を見ながらwhileループの使い方を一緒に学んでいきましょう。

whileループの基本

まずは、whileループの基本的な使い方を見てみましょう。while.rbというファイルを作成し、以下のコードを書いてみてください。

count = 1
while count <= 3
puts "#{count}回目の繰り返しです"
count += 1
end

このプログラムを実行すると、以下のように表示されます。

1回目の繰り返しです
2回目の繰り返しです
3回目の繰り返しです

このプログラムは、以下のような流れで実行されます。

  1. count変数を1で初期化
  2. count <= 3という条件をチェック(最初は 1 <= 3 で真)
  3. 条件が真なので、ブロック内の処理を実行
  4. メッセージを表示し、countに1を加える(countは2になる)
  5. ループの先頭に戻り、再度条件をチェック(2 <= 3で真)
  6. 条件が真なので、再びブロック内の処理を実行
  7. この繰り返しがcountが4になり、条件が偽になるまで続く
  8. 条件が偽になったら、ループを抜けて次の処理へ

whileループの基本的な構造は以下のとおりです。

while 条件式
# 条件式が真の間、繰り返し実行される処理
end

「while」は英語で「〜の間」という意味で、「条件が真である間、処理を繰り返す」という意味になります。

カウント変数の増減

繰り返し処理をする際は、カウント変数を使って繰り返し回数を管理することが一般的です。カウント変数を増やす(インクリメントする)際には、以下のような書き方があります。

# 以下の2つは同じ意味
count = count + 1
count += 1 # 省略形

+=演算子は「左辺の変数に右辺の値を加えて、その結果を左辺の変数に代入する」という意味です。この省略形を使うと、コードがより簡潔になります。

同様に、カウント変数を減らす(デクリメントする)場合は以下のように書きます。

# 以下の2つは同じ意味
count = count - 1
count -= 1 # 省略形

whileループの実用例

例1: 特定の回数だけ処理を繰り返す

特定の回数だけ処理を繰り返したい場合は、カウント変数を使った条件式が便利です。

# 5回繰り返すループ
count = 1
while count <= 5
puts "#{count}回目の処理"
count += 1
end

このコードは、1から5までの数字を表示します。このようなシンプルなカウントアップのループは、繰り返し処理の基本形です。

例2: ユーザーの入力を受け取るループ

whileループは、条件が満たされるまでユーザーの入力を受け付けるような処理にも使えます。

answer = nil
while answer != "Ruby"
puts "Rubyの綴りを入力してください:"
answer = gets.chomp
end
puts "正解です!"

このプログラムは、ユーザーが「Ruby」と正確に入力するまで、繰り返し入力を求めます。gets.chompはユーザーの入力を取得するメソッドで、入力された文字列から最後の改行文字を取り除いた値を返します。

例3: ゲームのメインループ

ゲームプログラミングでは、ゲームが終了するまでメインループを繰り返すという構造がよく使われます。

game_over = false
score = 0
while !game_over
puts "現在のスコア: #{score}"
puts "1: サイコロを振る, 2: ゲーム終了"
choice = gets.chomp.to_i
if choice == 1
dice = rand(1..6) # 1から6のランダムな数値
puts "サイコロの目: #{dice}"
score += dice
game_over = true if score >= 20 # スコアが20以上でゲーム終了
elsif choice == 2
game_over = true
else
puts "無効な選択です。もう一度お試しください。"
end
end
puts "ゲーム終了!最終スコア: #{score}"

このプログラムは、簡単なサイコロゲームを実装しています。game_over変数がfalseである間、ゲームのメインループが続きます。サイコロを振ってスコアが20以上になるか、ユーザーが終了を選択すると、game_overtrueになりループを抜けます。

breakを使ったループの制御

whileループでは、break文を使って途中でループを抜けることができます。これは、特定の条件が満たされたときにループを終了させたい場合に便利です。

count = 1
while true
puts "#{count}回目の繰り返しです"
break if count >= 3
count += 1
end

このプログラムを実行すると、以下のように表示されます。

1回目の繰り返しです
2回目の繰り返しです
3回目の繰り返しです

この例では、while trueによって無限ループを作成しています。trueは常に真なので、このループは永遠に続くことになります。しかし、break if count >= 3という命令によって、countが3以上になったらループを抜けるようにしています。

breakの後に条件を付ける場合は、このようにbreak if 条件式という形で1行で書くことができます。これは、if 条件式 then break endを簡略化した書き方です。

無限ループの注意点

無限ループ(while trueなど)を使う際は、必ず適切な脱出条件(break)を設定することが重要です。脱出条件がないと、プログラムが永遠に実行され続け、強制終了するしかなくなります。

以下は、無限ループの一般的な使い方です。

  1. 繰り返し条件が複雑で、ループの先頭で判断するのが難しい場合
  2. ユーザーが終了を選択するまで続けるインタラクティブなプログラム
  3. サーバープログラムのように、明示的に終了するまで動き続けるべきプログラム

無限ループを使う場合は、ループ内部で必ずbreakを使って脱出条件を設定しましょう。

nextを使った処理のスキップ

breakがループ全体を抜けるのに対し、nextは現在の繰り返しをスキップして次の繰り返しに進むために使います。

count = 0
while count < 5
count += 1
next if count == 3 # countが3のときは処理をスキップ
puts "#{count}回目の処理"
end

このプログラムを実行すると、以下のように表示されます。

1回目の処理
2回目の処理
4回目の処理
5回目の処理

next if count == 3という命令によって、countが3のときはそれ以降の処理(puts)をスキップして、次の繰り返しに進みます。そのため、「3回目の処理」という表示がなくなっています。

nextは、特定の条件下で処理をスキップしたい場合に便利です。例えば、配列内の特定の要素だけ処理をスキップしたい場合などに使えます。

while文とuntil文

Rubyでは、whileの他にuntilというループ制御構文もあります。untilwhileの逆で、「条件が偽である間、繰り返す」という意味になります。

count = 1
until count > 3
puts "#{count}回目の繰り返しです"
count += 1
end

このコードは先ほどのwhileの例と同じ結果になります。until count > 3while count <= 3と同じ意味です。

untilは、特に「〜になるまで繰り返す」という表現が自然な場合に使うと、コードが読みやすくなることがあります。どちらを使うかは、コードの読みやすさを考慮して選ぶとよいでしょう。

whileループとeachの使い分け

ここまでに学んだwhileループと、前回学んだeachメソッドは、どちらも繰り返し処理を行う方法ですが、使い分けるポイントがあります。

eachが適している場面

  • 配列やハッシュの全要素を処理する場合
  • コレクション内の各要素に対して同じ処理を行う場合
  • 繰り返し回数が事前に分かっている場合

whileが適している場面

  • 繰り返し回数が事前に分からない場合
  • 条件に応じて繰り返しを続けるか終了するか決める場合
  • ユーザー入力などの外部要因によって繰り返しを制御する場合
  • 無限ループを作成する必要がある場合

どちらの方法も基本的な繰り返し制御の仕組みですので、状況に応じて適切な方を選ぶようにしましょう。

まとめ

本章では、Rubyのwhileループについて学習しました。以下の内容を理解できたことと思います。

  • whileループは、条件が真である間、処理を繰り返す
  • カウント変数を使って繰り返し回数を管理できる
  • breakを使って途中でループを抜けることができる
  • while trueを使って無限ループを作成できるが、必ず脱出条件を設定する
  • nextを使って特定の繰り返しをスキップできる
  • untilwhileの逆で、条件が偽である間、処理を繰り返す

繰り返し処理は、プログラミングにおいて非常に重要な概念です。配列の処理にはeachメソッドが便利ですが、より汎用的な繰り返し制御が必要な場合はwhileループを使うことになります。状況に応じて適切な方法を選べるようになりましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
eachメソッドで配列の要素を順番に処理しよう