この記事で学べる知識:case文による分岐処理
この記事の練習問題を解くために必要な知識:
基礎文法(レッスン1)、比較演算子と論理演算子、if文による分岐処理、case文による分岐処理、for文による繰り返し処理、while文による繰り返し処理、until文による繰り返し処理、繰り返しの制御
<<前のページ | Ruby記事一覧 |
次のページ>> |
Rubyの文法「case文による分岐処理」とは
ここでは分岐処理(case文)の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。
「case文」は条件に応じて異なる処理を実行するRubyの分岐処理です。
特定の値や条件に応じて複数の処理を選択する際に利用され、特にif文では記述が煩雑になる場合に有用です。
Rubyでは条件分岐を簡潔に書く方法としてcase文が提供されています。
case文の概要
case文は条件に応じて異なる処理を行うための制御構造で、if文と異なり特定の値に基づいて処理を分岐させることに優れています。
Rubyのcase文では判定したい変数や値を一度だけ指定し、その値に応じた複数の条件をwhen
キーワードで列挙します。
複数の条件がある場合、if文で書くとコードが長くなりがちですが、case文を使えば簡潔に記述できるため、可読性が向上します。
case文の構文
case文の基本構文は次の通りです。
case 判定したい値 when 値1 # 値1の場合の処理 when 値2 # 値2の場合の処理 else # どの条件にも当てはまらない場合の処理 end
- case 判定したい値:
case
の後に分岐条件となる変数や値を指定します。 - when 値: それぞれの条件を
when
で指定し、その下にその条件が満たされたときの処理を記述します。 - else:
else
節はどの条件にも当てはまらない場合の処理です。この部分は省略可能ですが、予期しない場合の対応として書いておくと安心です。
Rubyではこのようにcase文を使うことで、特定の値に対する複数の条件を簡潔にまとめて書くことができます。
case文の使用例
それではcase文を使用した具体的な例を見てみましょう。
以下のプログラムでは、あるスコア(点数)に応じてランク(A, B, C)を表示します。
score = 85 case score when 90..100 puts "A" when 70..89 puts "B" else puts "C" end
- case score: 分岐条件の対象となる変数
score
を指定します。 - when 90..100:
90
から100
の範囲内にscore
がある場合、puts "A"
が実行されます。 - when 70..89:
70
から89
の範囲内であれば、puts "B"
が実行されます。 - else: 上記のいずれの条件にも該当しない場合、
puts "C"
が実行されます。
このプログラムではscore
が85
のため、条件when 70..89
に一致し、「B」が出力されます。
case文は範囲指定ができるため、このように数値の範囲によって異なる処理を行う場合にも適しています。
まとめ
case文はRubyにおける柔軟で簡潔な分岐処理方法です。
複数の条件を使った場合にコードが煩雑になりやすいif文に比べ、case文を使うことでコードが見やすく整理されます。
条件が複数ある分岐では積極的にcase文を活用し、可読性の高いコードを目指しましょう。
case文による条件分岐の練習問題:曜日判定プログラムを作ろう
ユーザーから入力された数値(1~7)を曜日に変換し、その曜日を表示するプログラムを作成しましょう。
例えば1が入力された場合は「月曜日」、2が入力された場合は「火曜日」のように表示します。
1~7以外の数値が入力された場合は「無効な入力です」と表示します。
この問題の要件
以下の要件に従ってコードを作成してください。
- ユーザーに1から7の数値を入力させること。
case文
を使用して、数値に基づいて曜日を判定すること。- 1 → 「月曜日」
- 2 → 「火曜日」
- 3 → 「水曜日」
- 4 → 「木曜日」
- 5 → 「金曜日」
- 6 → 「土曜日」
- 7 → 「日曜日」
- 1から7以外の数値が入力された場合には、「無効な入力です」と表示すること。
- 判定結果を画面に表示すること。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
1から7の数値を入力してください: 3 入力された数値に対応する曜日は:水曜日です
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:文字列「1から7の数値を入力してください:」を出力
2:変数day_numberにユーザーからの入力を整数に変換して代入
3:case文で変数day_numberに基づき分岐処理を開始
□ 1の場合、文字列「月曜日」を返す
□ 2の場合、文字列「火曜日」を返す
□ 3の場合、文字列「水曜日」を返す
□ 4の場合、文字列「木曜日」を返す
□ 5の場合、文字列「金曜日」を返す
□ 6の場合、文字列「土曜日」を返す
□ 7の場合、文字列「日曜日」を返す
□ それ以外の場合、文字列「無効な入力です」を返す
4:「入力された数値に対応する曜日は:#{day_name}です」と出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# ユーザーに数値を入力させる puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i # gets.chomp.to_i はユーザーからの入力を受け取り、改行を除去し、整数に変換します。 # 数値に基づいて曜日を判定する =begin 【穴埋め問題1】 ここでcase文を使って、day_numberに応じた曜日名をday_nameに代入するコードを書いてください。 1は"月曜日"、2は"火曜日"のように対応させ、範囲外の場合は"無効な入力です"としてください。 =end # 繰り返し処理を追加する =begin 【穴埋め問題2】 ここでユーザーが正しい範囲の数値を入力するまで繰り返し処理を行うコードを書いてください。 =end # 判定結果を表示する puts "入力された数値に対応する曜日は:#{day_name}です"
この問題の穴埋めコードは以上です。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
# ユーザーに数値を入力させる puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i # gets.chomp.to_i はユーザーからの入力を受け取り、改行を除去し、整数に変換します。 # 数値に基づいて曜日を判定する day_name = case day_number when 1 "月曜日" when 2 "火曜日" when 3 "水曜日" when 4 "木曜日" when 5 "金曜日" when 6 "土曜日" when 7 "日曜日" else "無効な入力です" end # 判定結果を表示する puts "入力された数値に対応する曜日は:#{day_name}です"
正解コードの解説
このプログラムは1から7までの数値をユーザーから入力してもらい、それに応じた曜日を表示するものです。
case文
を使って分岐処理を行い、適切な曜日を出力します。以下の各ブロックで使われている文法を詳しく説明します。
ユーザーからの入力
puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i
puts
は画面にメッセージを表示するメソッドです。「1から7の数値を入力してください」と表示します。gets
はユーザーの入力を受け取るメソッドです。このままでは文字列のままなので、chomp
で改行を取り除き、to_i
で整数に変換しています。
case文
による分岐処理
day_name = case day_number when 1 "月曜日" when 2 "火曜日" when 3 "水曜日" when 4 "木曜日" when 5 "金曜日" when 6 "土曜日" when 7 "日曜日" else "無効な入力です" end
case文
は指定した値に基づいて処理を分岐させるために使用します。
ここではday_number
の値が1から7までの範囲に対応する曜日を返します。
- 例えば
day_number
が1であれば「月曜日」、2であれば「火曜日」を表示します。 else
は指定された範囲外の値が入力されたときに実行されるコードです。
1から7以外の数値が入力された場合、「無効な入力です」と表示されます。
結果の表示
puts "入力された数値に対応する曜日は:#{day_name}です"
puts
を使って、計算結果を表示します。#{}
は、文字列の中に変数を埋め込むために使用され、ここではday_name
の内容が表示されます。
<<前のページ |
Ruby記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。