Ruby練習問題3-2:メソッドの戻り値を理解しよう

記事内に商品プロモーションを含む場合があります

Rubyの初心者向け問題3-2:メソッドの戻り値を理解しよう

この問題を解くために必要な知識:
【レベル1~2の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)、配列(Array)、ハッシュ(Hash)、コレクション操作(配列、ハッシュの操作)、Enumerableモジュール

【レベル3の知識】
メソッドの定義と呼び出し、メソッドの戻り値、クラスの定義と使用コンストラクタクラスの継承モジュールの定義と使用ミックスイン

<<前の問題 問題集Top 次の問題>>

Rubyの文法「メソッドの戻り値」とは

ここではメソッドの戻り値の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。



メソッドの戻り値とは、メソッドが実行された結果として返す値のことです。

Rubyでは、メソッド内で行われた計算や処理の結果を呼び出し元に返すことができます。

これにより、メソッドで行った処理結果を別の場所で利用したり、さらに処理を続けたりすることが可能です。

基本的な使い方

Rubyのメソッドでは、returnキーワードを使って戻り値を明示的に返すことができます。

以下は、2つの値を比較し、大きい方の値を返すメソッドの例です。

def max(a, b)
  return a > b ? a : b
end

result = max(10, 20)
puts result # 20

この例では、maxメソッドが2つの数値を比較し、大きい方の数値を返しています。returnキーワードによって戻り値を指定し、その結果を変数resultに格納しています。

暗黙の戻り値

実は、Rubyではreturnを省略することも可能です。メソッド内の最後に評価された値が自動的に戻り値として返されます。

以下は同じ機能を持つが、returnを省略した例です。

def max(a, b)
  a > b ? a : b
end

result = max(10, 20)
puts result # 20

このように、Rubyでは最後に評価された式の値が戻り値となるため、returnを毎回書く必要はありません。

まとめ

メソッドの戻り値は、メソッドを使って計算した結果や処理の結果を返すために非常に重要です。

returnを使うことで明示的に値を返すこともできますが、Rubyの柔軟な設計により、returnを省略しても自然に戻り値が返される点が特徴です。

この基本を理解しておくと、Rubyのプログラムをより効率的に書けるようになります。 ​




Ruby練習問題3-1_BMI計算プログラムを作ろう

この問題では、BMI(体格指数)を計算し、その値に基づいて「低体重」「適正体重」「肥満」のいずれかを判断するプログラムを作成します。

BMIを計算するメソッドと、その値に基づいて判定を行うメソッドの戻り値の仕組みを理解することが目標です。

この問題の要件

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

  1. calculate_bmiメソッドを定義し、引数として身長(メートル単位)と体重(キログラム単位)を受け取り、BMIを計算してその値を返すこと。
    • BMIの計算方法は次の式を使用する:
      BMI = 体重(kg) ÷ (身長(m) × 身長(m))
  2. judge_bmiメソッドを定義し、引数としてBMIの値を受け取り、その値に基づいて「低体重」「適正体重」「肥満」のいずれかを文字列で返すこと。
    • 判定基準は次の通り:
      • BMI < 18.5: 「低体重」
      • 18.5 <= BMI < 25: 「適正体重」
      • BMI >= 25: 「肥満」
  3. ユーザーから身長と体重をメートルとキログラム単位で入力してもらい、BMIを計算して結果を表示すること。
  4. 計算されたBMIに基づいて適正体重かどうかを判定し、その結果を表示すること。

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

----- ↓出力される結果の例↓ -----

身長をメートル単位で入力してください (例: 1.75):
1.75
体重をキログラム単位で入力してください (例: 68):
68
あなたのBMIは 22.20408163265306 です。
あなたは 適正体重 です。

----- ↑出力される結果の例↑ -----

この問題を解くヒント

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

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

正解のコードは上から順に以下のような構成となっています。

1.calculate_bmiメソッドの定義
 1-1. 引数としてheight(身長)とweight(体重)を受け取る
 1-2. BMIを計算する式 weight / (height * height) を実行
 1-3. 計算した結果を戻り値として返す

2.judge_bmiメソッドの定義
 2-1. 引数としてbmiを受け取る
 2-2. if文を使ってBMI値に基づく条件分岐
  2-2-1. bmiが18.5未満の場合「低体重」として判定
  2-2-2. bmiが18.5以上25未満の場合「適正体重」として判定
  2-2-3. bmiが25以上の場合「肥満」として判定
 2-3. 判定結果を戻り値として返す

3.ユーザー入力部分
 3-1. putsで身長の入力を促すメッセージを表示
 3-2. gets.to_fでユーザーからの入力を浮動小数点数として取得し、heightに代入
 3-3. putsで体重の入力を促すメッセージを表示
 3-4. gets.to_fでユーザーからの入力を浮動小数点数として取得し、weightに代入

4.calculate_bmiメソッドを呼び出してBMIを計算し、結果を表示
 4-1. calculate_bmiheightweightを渡して呼び出す
 4-2. 結果を変数bmiに格納し、putsでBMIを表示

5.judge_bmiメソッドを呼び出してBMIの判定を行い、結果を表示
 5-1. judge_bmibmiを渡して呼び出す
 5-2. 結果を変数resultに格納し、putsで判定結果を表示

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

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

# BMIを計算するメソッド
def calculate_bmi(height, weight)
  =begin
  【穴埋め問題1】
  ここにBMIを計算するコードを書いてください。
  BMIは体重(kg) ÷ (身長(m) × 身長(m)) の式を使います。
  =end
end

# BMIの値に基づいて適正体重かどうかを判断するメソッド
def judge_bmi(bmi)
  =begin
  【穴埋め問題2】
  ここにBMIに基づいて、低体重、適正体重、肥満のいずれかを返す条件分岐のコードを書いてください。
  BMIが18.5未満の場合は「低体重」、18.5以上25未満の場合は「適正体重」、25以上の場合は「肥満」とします。
  =end
end

# ユーザーから身長と体重を入力してもらう
puts "身長をメートル単位で入力してください (例: 1.75):"
height = gets.to_f
puts "体重をキログラム単位で入力してください (例: 68):"
weight = gets.to_f

# BMIを計算し、その結果を表示する
bmi = calculate_bmi(height, weight)
puts "あなたのBMIは #{bmi} です。"

# BMIに基づいて適正体重かどうかを判断し、結果を表示する
result = judge_bmi(bmi)
puts "あなたは #{result} です。"

 

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



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

# BMIを計算するメソッド
def calculate_bmi(height, weight)
  # BMIを計算し、結果を返す
  weight / (height * height)
end

# BMIの値に基づいて適正体重かどうかを判断するメソッド
def judge_bmi(bmi)
  if bmi < 18.5
    "低体重"
  elsif bmi >= 18.5 && bmi < 25
    "適正体重"
  else
    "肥満"
  end
end

# ユーザーから身長と体重を入力してもらう
puts "身長をメートル単位で入力してください (例: 1.75):"
height = gets.to_f
puts "体重をキログラム単位で入力してください (例: 68):"
weight = gets.to_f

# BMIを計算し、その結果を表示する
bmi = calculate_bmi(height, weight)
puts "あなたのBMIは #{bmi} です。"

# BMIに基づいて適正体重かどうかを判断し、結果を表示する
result = judge_bmi(bmi)
puts "あなたは #{result} です。"

********************

コードの解説

今回のRubyコードは、BMI(体格指数)を計算し、その値に基づいて「低体重」「適正体重」「肥満」を判断するプログラムです。

今回は特にメソッドの戻り値に焦点を当てて説明します。

BMIを計算するメソッド

def calculate_bmi(height, weight)
  weight / (height * height)
end

この部分では、calculate_bmiというメソッドを定義しています。このメソッドは、2つの引数height(身長)とweight(体重)を受け取り、それを元にBMIを計算します。

メソッドの戻り値とは、このようにメソッド内で処理した結果を呼び出し元に返す値のことです。

具体的には、weight / (height * height)という計算結果がメソッドの戻り値になります。この戻り値をプログラム内で利用することができます。

BMIの値に基づいて適正体重かどうかを判断するメソッド

def judge_bmi(bmi)
  if bmi < 18.5
    "低体重"
  elsif bmi >= 18.5 && bmi < 25
    "適正体重"
  else
    "肥満"
  end
end

judge_bmiメソッドは、BMIの値に基づいて適正体重かどうかを判断します。このメソッドもメソッドの戻り値を利用しており、BMIの値に応じて「低体重」「適正体重」「肥満」のいずれかを返します。

例えば、if文でBMIが18.5未満の場合は「低体重」を返します。この返された文字列がメソッドの戻り値です。プログラムはこの戻り値を利用して、後に適切なメッセージを表示します。

ユーザーからの入力とBMIの計算

puts "身長をメートル単位で入力してください (例: 1.75):"
height = gets.to_f
puts "体重をキログラム単位で入力してください (例: 68):"
weight = gets.to_f

getsメソッドを使って、ユーザーから身長と体重を入力してもらいます。

to_fメソッドで、入力された値を浮動小数点数に変換しています。これで計算に必要な数値が得られます。

メソッドの呼び出しと戻り値の利用

bmi = calculate_bmi(height, weight)
puts "あなたのBMIは #{bmi} です。"

ここでは、calculate_bmiメソッドを呼び出してBMIを計算し、その結果を変数bmiに格納しています。

メソッドの戻り値である計算結果をbmiとして保存し、putsメソッドでユーザーに表示します。

BMIに基づいて適正体重かどうかを判断する

result = judge_bmi(bmi)
puts "あなたは #{result} です。"

次に、judge_bmiメソッドを使ってBMIの値に基づく判断を行い、その結果をresultに格納します。

この結果もメソッドの戻り値であり、最終的には「低体重」「適正体重」「肥満」のいずれかがresultとして返されます。

結果をputsで表示することで、ユーザーにフィードバックを与えます。

まとめ

このプログラムでは、2つのメソッドの戻り値を使って、BMIの計算結果や適正体重かどうかを判断しています。

メソッドの戻り値は、メソッドを使って計算した結果を別の場所で活用するために重要な要素です。

これを理解することで、Rubyのメソッドを使ったプログラム作成がよりスムーズになります。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Ruby練習問題集へ戻る
    トップページへ戻る