• Xでシェア
  • LINEでシェア
  • このエントリーをはてなブックマークに追加

Ruby whileの使い方

この記事のポイント

  • 条件が真の間、処理を継続的に実行する仕組み
  • 基本的なwhile文からuntil文、修飾子まで網羅
  • 実際の開発で使える8つの実用的なサンプルコード

目次

Rubyのwhileとは?

Rubyのwhileは、指定した条件が真である限り処理を繰り返し実行する制御構文です。条件式がtrueを返す間は処理ブロックが継続的に実行され、falseになると繰り返しが終了します。例えば、動物の餌やりで餌がある間は給餌を続けたり、ゲームでプレイヤーの体力が残っている間は戦闘を継続するような処理に使用されます。プログラミングにおいて基本的な制御構造の一つで、Webアプリケーション開発では条件に応じた継続処理、データの順次読み込み、ユーザー操作の待機によく使われます。whileを使うことで、事前に繰り返し回数が分からない処理や、特定の条件が満たされるまで継続したい処理を効率的に実装できます。適切な終了条件の設定により、無限ループを避けた安全な繰り返し処理を実現する制御文です。

【関連】
Rubyをもっと詳しく学ぶならpaizaラーニング

基本構文

Rubyにおけるwhileの基本的な書き方は、while キーワードの後に条件式を記述し、その後にendまでの間に実行したい処理を書きます。条件式は毎回の繰り返しで評価され、trueの間は処理が継続されます。また、until文では条件がfalseの間は処理が継続されます。while修飾子では一行で簡潔に記述できます。ループ内では適切にカウンター変数を更新し、終了条件を満たすよう注意が必要です。

# 基本的なwhileループ count = 1 while count <= 3 puts "ネコ#{count}匹目" count += 1 end puts "合計#{count - 1}匹です"

出力結果:

ネコ1匹目
ネコ2匹目
ネコ3匹目
合計3匹です

実用例

ここからは実際の開発現場でよく使われるwhile文の具体例を紹介します。基本的なカウンター処理から始まり、条件制御、配列処理、ユーザー入力待機まで、段階的に学んでいきます。各例では動物をテーマにしたデータを使用し、実際にコードを実行して結果を確認できるよう構成しています。これらのサンプルコードを理解することで、while文を使った効率的な繰り返し処理方法を習得できます。実際のWebアプリケーション開発において、データ処理、条件判定など、さまざまな場面でwhile文が活用されています。

基本的なカウンター処理

while文を使った最も基本的なカウンター処理です。カウンター変数を初期化し、条件をチェックしながら値を増加させていきます。動物の個体数カウントや順番管理など、数値を段階的に増加させながら処理を行いたい場面で使用される基本的なパターンです。終了条件の設定とカウンターの更新を忘れないことが重要です。

animal_count = 1 total_animals = 5 while animal_count <= total_animals puts "動物#{animal_count}匹目: イヌ" animal_count += 1 end puts "全部で#{total_animals}匹の動物を数えました"

出力結果:

動物1匹目: イヌ
動物2匹目: イヌ
動物3匹目: イヌ
動物4匹目: イヌ
動物5匹目: イヌ
全部で5匹の動物を数えました

条件による繰り返し制御

特定の条件が満たされるまで処理を継続する制御パターンです。数値計算や状態チェックなど、事前に繰り返し回数が分からない場面で活用されます。動物の成長過程のシミュレーションや、目標体重に達するまでの給餌管理など、条件達成まで継続的な処理が必要なシステムで重要な制御方法です。

cat_weight = 2.0 target_weight = 4.5 week = 1 while cat_weight < target_weight cat_weight += 0.3 puts "#{week}週目: ネコの体重は#{cat_weight.round(1)}kgです" week += 1 end puts "目標体重に到達しました!"

出力結果:

1週目: ネコの体重は2.3kgです
2週目: ネコの体重は2.6kgです
3週目: ネコの体重は2.9kgです
4週目: ネコの体重は3.2kgです
5週目: ネコの体重は3.5kgです
6週目: ネコの体重は3.8kgです
7週目: ネコの体重は4.1kgです
8週目: ネコの体重は4.4kgです
9週目: ネコの体重は4.7kgです
目標体重に到達しました!

配列要素の順次処理

while文を使って配列の要素を順番に処理するパターンです。インデックスを使って配列の各要素にアクセスし、全ての要素を処理するまで繰り返します。動物リストの順次表示や、データベースレコードの一件ずつ処理など、配列やリストの全要素に対して順序立てた処理を行いたい場面で使用される実用的な処理方法です。

zoo_animals = ["ライオン", "ゾウ", "キリン", "サル"] index = 0 while index < zoo_animals.length current_animal = zoo_animals[index] puts "檻#{index + 1}番: #{current_animal}がいます" index += 1 end puts "動物園の見学が完了しました"

出力結果:

檻1番: ライオンがいます
檻2番: ゾウがいます
檻3番: キリンがいます
檻4番: サルがいます
動物園の見学が完了しました

ユーザー入力の待機処理

特定の入力があるまで処理を待機し続けるパターンです。ユーザーからの正しい入力を受け取るまで繰り返し入力を促します。動物の名前入力や選択肢の選択などが必要なシステムで、正確な入力を保証するために使用される重要な処理パターンです。入力検証とエラーハンドリングを組み合わせることで、堅牢なシステムを構築できます。

correct_answer = "ネコ" user_input = "" attempts = 0 while user_input != correct_answer && attempts < 3 attempts += 1 puts "この動物は何でしょう?ニャーと鳴きます。(#{attempts}/3回目)" user_input = "ネコ" # 実際の入力をシミュレート puts "入力: #{user_input}" end puts user_input == correct_answer ? "正解です!" : "残念、正解はネコでした"

出力結果:

この動物は何でしょう?ニャーと鳴きます。(1/3回目)
入力: ネコ
正解です!

数値の累積計算

while文を使って数値を累積的に計算するパターンです。合計値や平均値の計算、統計処理など、データを段階的に蓄積しながら計算を行います。動物の餌代の累計計算や、月間の体重変化の追跡など、継続的なデータ収集と計算が必要な業務システムで使用される処理パターンです。

day = 1 total_food_cost = 0 daily_cost = 150 max_days = 7 while day <= max_days total_food_cost += daily_cost puts "#{day}日目: 今日の餌代#{daily_cost}円 (累計: #{total_food_cost}円)" day += 1 end puts "1週間の餌代合計: #{total_food_cost}円"

出力結果:

1日目: 今日の餌代150円 (累計: 150円)
2日目: 今日の餌代150円 (累計: 300円)
3日目: 今日の餌代150円 (累計: 450円)
4日目: 今日の餌代150円 (累計: 600円)
5日目: 今日の餌代150円 (累計: 750円)
6日目: 今日の餌代150円 (累計: 900円)
7日目: 今日の餌代150円 (累計: 1050円)
1週間の餌代合計: 1050円

until文による逆条件制御

until文は条件がfalseの間繰り返しを継続する制御文です。whileとは逆の論理で、trueになると終了します。動物の満腹状態になるまで給餌を続けたり、目標に達していない間は訓練を継続するなど、否定的な条件での制御が自然に表現できる場面で使用される便利な制御構文です。

rabbit_hunger = 10 food_per_meal = 2 meal_count = 0 until rabbit_hunger <= 0 rabbit_hunger -= food_per_meal meal_count += 1 puts "#{meal_count}回目の食事: 空腹度#{[rabbit_hunger, 0].max}" end puts "ウサギが満腹になりました!"

出力結果:

1回目の食事: 空腹度8
2回目の食事: 空腹度6
3回目の食事: 空腹度4
4回目の食事: 空腹度2
5回目の食事: 空腹度0
ウサギが満腹になりました!

while修飾子による簡潔な記述

while修飾子を使用して、一行で簡潔にwhile文を記述するパターンです。単純な処理を繰り返す場合に、コードを短く読みやすくできます。カウンターの増加や単純な出力処理など、処理内容が簡単で条件も明確な場面で使用される、効率的なコーディング手法です。可読性を保ちながらコード量を削減できます。

hamster_exercise = 0 puts "ハムスター#{hamster_exercise += 1}周目" while hamster_exercise < 4 puts "運動完了!" bird_count = 5 puts "トリが#{bird_count}羽います" while (bird_count -= 1) > 0

出力結果:

ハムスター1周目
ハムスター2周目
ハムスター3周目
ハムスター4周目
運動完了!
トリが4羽います
トリが3羽います
トリが2羽います
トリが1羽います

無限ループとbreak制御

while trueによる無限ループとbreak文を組み合わせた制御パターンです。複雑な終了条件や複数の脱出条件がある場合に使用されます。動物の健康状態を継続監視し、異常が検出された時点で処理を終了するようなシステムで活用されます。適切なbreak条件の設定により、柔軟で安全な繰り返し処理を実現する高度な制御手法です。

dog_energy = 10 exercise_round = 0 while true exercise_round += 1 dog_energy -= 2 puts "#{exercise_round}ラウンド: イヌのエネルギー#{dog_energy}" break if dog_energy <= 2 break if exercise_round >= 5 end puts "運動終了!エネルギー残量: #{dog_energy}"

出力結果:

1ラウンド: イヌのエネルギー8
2ラウンド: イヌのエネルギー6
3ラウンド: イヌのエネルギー4
4ラウンド: イヌのエネルギー2
運動終了!エネルギー残量: 2

まとめ

while文はRubyにおける繰り返し処理の中核を担う制御構文です。基本的なカウンター処理から複雑な条件制御まで、さまざまな場面で柔軟に対応できます。適切な終了条件の設定と変数の更新を心がけ、無限ループを避けることが重要です。本記事で紹介した8つの実用例を参考に、条件に応じた繰り返し処理を効果的に実装し、より堅牢で保守性の高いプログラムの作成に役立ててください。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Rubyのリファレンス記事一覧
  4. Ruby whileの使い方
ログインしてください