基礎

Rubyのwhile文入門|繰り返し処理の基本と無限ループの防ぎ方

while文は条件が真である間、処理を繰り返し実行する制御構文です。「〜の間、繰り返す」という繰り返し処理を表現でき、ループの回数が事前に決まっていない場合に特に便利です。この記事ではwhile文の基本から実践的な使い方、無限ループを防ぐポイントまで解説します。

基本的な使い方

while文は条件式が真(true)の間、ブロック内の処理を繰り返します。条件式はループの先頭で毎回評価されます。

Ruby
count = 1

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

puts '終了'
実行結果
1回目の繰り返し
2回目の繰り返し
3回目の繰り返し
4回目の繰り返し
5回目の繰り返し
終了

countが1から始まり、ループの度に1ずつ増えます。countが6になると条件count <= 5が偽になり、ループを抜けます。count += 1を忘れるとcountが永遠に1のままとなり、無限ループになるので注意してください。

カウントダウン

Ruby
countdown = 5

while countdown > 0
  puts countdown
  countdown -= 1
end

puts '発射!'
実行結果
5
4
3
2
1
発射!

breakとnext

breakでループを途中で抜ける

breakを使うと、条件に関係なくループを即座に終了できます。

Ruby
i = 1

while i <= 100
  if i > 5
    puts "5を超えたのでループを終了"
    break
  end
  puts "i = #{i}"
  i += 1
end
実行結果
i = 1
i = 2
i = 3
i = 4
i = 5
5を超えたのでループを終了

nextで次のイテレーションへ

nextを使うと、現在のイテレーションの残りの処理をスキップして、次のイテレーションに進みます。

Ruby
i = 0

while i < 10
  i += 1
  next if i.even?  # 偶数はスキップ
  puts i
end
実行結果
1
3
5
7
9

実践的な使い方

合計値が閾値を超えるまで繰り返す

Ruby
# 貯金シミュレーション
savings = 0
month = 0
monthly_deposit = 30000
goal = 200000

while savings < goal
  month += 1
  savings += monthly_deposit
  puts "#{month}ヶ月目: 貯金額 #{savings}円"
end

puts "目標の#{goal}円に到達しました!(#{month}ヶ月)"
実行結果
1ヶ月目: 貯金額 30000円
2ヶ月目: 貯金額 60000円
3ヶ月目: 貯金額 90000円
4ヶ月目: 貯金額 120000円
5ヶ月目: 貯金額 150000円
6ヶ月目: 貯金額 180000円
7ヶ月目: 貯金額 210000円
目標の200000円に到達しました!(7ヶ月)

配列の要素を順に処理

Ruby
fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう']
index = 0

while index < fruits.length
  puts "#{index + 1}. #{fruits[index]}"
  index += 1
end
実行結果
1. りんご
2. バナナ
3. みかん
4. ぶどう
whileとeachの使い分け

配列の要素を順に処理する場合はeachメソッドの方が簡潔です。while文は「条件が満たされるまで繰り返す」場合や、ループ回数が事前にわからない場合に使いましょう。

無限ループに注意

while文ではカウンタ変数の更新を忘れると無限ループになります。必ずループ内で条件が偽になるように変数を更新するか、breakでループを抜ける処理を入れましょう。

まとめ

  • whileは条件が真の間、処理を繰り返す
  • ループ内でカウンタ変数を更新しないと無限ループになる
  • breakでループを途中終了、nextで次のイテレーションへスキップ
  • ループ回数が不定の場合にwhileが適している
  • 配列の処理にはeachメソッドの方が簡潔