【Ruby】レッスン2-05:while文による繰り返し処理を理解しよう

50110130

一つ前のページではfor文による繰り返し処理について学習しました。

今回は while文による繰り返し処理 について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
 ・Lesson2-1:比較演算子と論理演算子を理解しよう
 ・Lesson2-2:if文による分岐処理を理解しよう
 ・Lesson2-3:case文による分岐処理を理解しよう
 ・Lesson2-4:for文による繰り返し処理を理解しよう
 ・Lesson2-5:while文による繰り返し処理を理解しよう ◁今回はココ
 ・Lesson2-6:until文による繰り返し処理を理解しよう
 ・Lesson2-7:繰り返しを制御しよう
 ・確認問題2-☆1:ハイアンドロー ゲームを作ろう
 ・確認問題2-☆2:数当てゲームを作ろう
 ・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:メソッド
Lesson4:コレクション
Lesson5:オブジェクト指向編

<<前のページ

Rubyの記事一覧

次のページ>>

Rubyのwhile文とは?繰り返し処理の基本を押さえよう

Rubyには特定の条件が満たされるまで処理を繰り返す「while文」があります。

この文法を使うと条件に応じた回数で繰り返し処理を実行できるため、特定の条件下で同じ処理を何度も行いたい場合に便利です。

while文はプログラムの基本構造の一つであり、繰り返し処理の理解を深めるために重要です。

while文の仕組みと動作の基本

while文は指定した条件が「真(true)」である限り、内部の処理を繰り返す文法です。

条件が「偽(false)」になると繰り返しが終了し、次の処理に移ります。

条件の設定次第では、繰り返しが実行されない(最初から条件が満たされていない)こともあります。

基本構文で理解するwhile文の書き方

while文の基本構文は以下のようになります。

while 条件
  # 繰り返し処理
end

構文の流れは最初に「条件」が評価され、その結果がtrueであれば内部の処理が実行されます。

そして再び「条件」が評価され、trueである限り繰り返しが続きます。

falseになると繰り返しが終了します。

カウントダウンで学ぶ実用的なwhile文

具体的な例として、カウントダウンを行うプログラムを作成してみましょう。

このプログラムでは、数値が0に達するまで「カウントダウン」を表示します。

count = 5  # カウントの開始点を設定

while count > 0 変数countが0よりも大きければ処理を実施
  puts count  # 現在のカウントを表示
  count -= 1  # カウントを1ずつ減らす
end

puts "カウントダウン終了!"  # カウントダウンの終了を表示

このプログラムはcountの値が0より大きい限りputs countが実行され、countが1ずつ減少します。

最終的にcountが0になった時点で条件がfalseとなり、繰り返しが終了して「カウントダウン終了!」と表示されます。

while文で無限ループを防ぐコツ

while文を使う際には無限ループに注意が必要です。

無限ループとは、条件が常にtrueのまま変更されず、繰り返しが永遠に終わらない状態を指します。

例えば以下のようなコードは無限ループを引き起こします。

i = 1

while i > 0
  puts i
end

このコードではiの値が変化しないため、条件が永遠にtrueのままとなり、プログラムは終了しません。

無限ループを避けるためには、ループ内で条件が変化するように適切に処理を追加する必要があります。

while文のまとめと活用のポイント

while文は指定した条件が満たされている間に繰り返し処理を実行する制御構造で、繰り返し処理の基本となります。

while文の正しい使用方法を学び、無限ループに気をつけながら使うことで、より柔軟なプログラムを作成できるようになります。

for文と並んでよく使用されるwhile文を、しっかりとマスターしましょう。

練習問題|while文で指定数まで数えるプログラムを作ろう

while文による繰り返し処理をしっかりと身に着けるため、練習問題に挑戦しましょう。

練習問題:ユーザー入力に基づいてカウントアップ

ユーザーが指定した数まで、1から順に数を表示するプログラムを作成してください。

このプログラムではwhile文を使って繰り返し処理を行います。

ユーザーに終了する数を入力してもらい、1から指定した数までの値を順に表示し、最後に完了メッセージを表示します。

以下の要件に従ってコードを完成させてください。

  1. printを使って「終了する数を入力してください: 」と表示し、ユーザーに終了する数を入力してもらうこと。
  2. 入力された数を整数としてend_numberという変数に格納すること。
  3. 変数iを1で初期化し、iend_number以下の間、次の処理を繰り返すこと。
    • 現在のiの値をputsを使って表示すること。
    • iを1増やすこと。
  4. 繰り返しが終了した後に、putsで「1から○までの数をすべて表示しました。」と出力すること(○には入力されたend_numberが入る)。

ただし、以下のような実行結果となること。

終了する数を入力してください: 5
現在の数値: 1
現在の数値: 2
現在の数値: 3
現在の数値: 4
現在の数値: 5
1から5までの数をすべて表示しました。

【ヒント】自力で解くのが難しい人へ

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:ユーザーに終了する数を入力させ、「終了する数を入力してください: 」と出力
2:ユーザーの入力を整数に変換してend_numberに格納
3:変数iを1で初期化
4:while文を使ってループ開始、iend_number以下である間繰り返し
  □ 現在のiの値を出力
  □ iに1を加算
5:ループ終了後、「1から#{end_number}までの数をすべて表示しました。」と出力

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 終了する数値を入力するように促す
print "終了する数を入力してください: "
end_number = gets.to_i  # ユーザーからの入力を整数に変換して格納

# カウンタ変数を初期化
i = 1

# while文の開始。iがend_number以下である間、ループを繰り返す
=begin
【穴埋め問題1】
ここでwhile文を使って、変数iがend_number以下である間、現在の数値を表示し、カウンタを1増加させるコードを書いてください。
=end

# ループが終了したことを表示
puts "1から#{end_number}までの数をすべて表示しました。"

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

この問題の解答例と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
# 終了する数値を入力するように促す
print "終了する数を入力してください: "
end_number = gets.to_i  # ユーザーからの入力を整数に変換して格納

# カウンタ変数を初期化
i = 1

# while文の開始。iがend_number以下である間、ループを繰り返す
while i <= end_number
  # 現在のカウンタの値を表示
  puts "現在の数値: #{i}"
  
  # カウンタを1ずつ増加させる
  i += 1
end

# ループが終了したことを表示
puts "1から#{end_number}までの数をすべて表示しました。"
Q
正解コードの解説

コードをブロックごとに分割して解説します。

入力のプロンプトとユーザー入力の取得

print "終了する数を入力してください: "
end_number = gets.to_i

print "終了する数を入力してください: " は、ユーザーに数値の入力を促すメッセージを表示します。

end_number = gets.to_i は、ユーザーが入力した値を整数に変換して変数end_numberに格納します。
getsは入力を文字列として受け取り、.to_iメソッドで整数に変換しています。

カウンタ変数の初期化

i = 1

i = 1 はカウンタ変数を1で初期化しています。

この変数iは1からユーザーが指定した数までの値を順に表示するために使用されます。

繰り返し処理(while文)

while i <= end_number
  puts "現在の数値: #{i}"
  i += 1
end

while i <= end_number は、iend_number以下である限り繰り返し処理を行うwhile文です。while文は、指定した条件がtrueである間、ブロック内の処理を繰り返し実行します。

この条件では、「iend_number以下である間だけ繰り返す」ため、iが指定の数を超えるとループが終了します。

puts "現在の数値: #{i}" は、現在のiの値を表示する部分です。#{i}の部分で、変数iの値が文字列内に展開され、毎回異なる数が表示されます。

i += 1 はカウンタ変数iを1ずつ増加させています。こうすることで、iの値が徐々に増加し、最終的にiend_numberを超えるとwhile文の条件がfalseになり、ループが終了します。

終了メッセージの表示

puts "1から#{end_number}までの数をすべて表示しました。"

puts "1から#{end_number}までの数をすべて表示しました。" は、whileループが終了した後に表示されるメッセージです。

これによりユーザーに指定された数まで表示が完了したことを知らせます。

まとめ

このプログラムではユーザーが入力した数まで1から順に表示する処理を「while文」を使って実現しています。

while文は条件が満たされている間繰り返すという特徴を持ち、非常にシンプルかつ強力な繰り返し処理の方法です。

今回のコードを通じて「while文」の基本的な使い方と繰り返し処理の考え方を身につけていただければと思います。

ぜひ他の条件でも「while文」を試し、繰り返し処理の応用力を高めてください。

<<前のページ

Rubyの記事一覧

次のページ>>

FAQ|while文の書き方と使いどころ

Q
Q1. Rubyのwhile文とloopメソッドの違いは何ですか?

while文は条件を満たす限り処理を繰り返しますが、loopメソッドは基本的に無限ループ前提の構文で、明示的にbreakなどで抜けない限り終了しません。条件付きの繰り返しにはwhile文の方が適しています。

Q
Q2. while文の条件に変数を使うとき、エラーを防ぐにはどうすればいいですか?

変数がnilになる可能性や未定義のまま条件判定に使われると、予期しない動作をすることがあります。条件に使う前に、変数に初期値を設定しておくことが安全です。

Q
Q3. while文の繰り返し回数が不明な場合でも使えますか?

はい、繰り返しの回数が事前に分からなくても、終了条件が定義できればwhile文は有効です。たとえば、ユーザーの入力に応じてループを終了するような処理に向いています。

記事URLをコピーしました