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メソッドの方が簡潔