【Ruby】レッスン3-03:メソッドの戻り値を理解しよう

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

この記事で学べる知識:メソッドの戻り値

この記事の練習問題を解くために必要な知識:
基礎文法と制御構造(レッスン1~2)メソッドの定義と呼出しデフォルト引数とキーワード引数メソッドの戻り値真偽値を返すメソッドエラーメッセージ例外処理

<<前のページ Ruby記事一覧 次のページ>>

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

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



Rubyにおける「メソッドの戻り値」は、メソッド内で実行した処理の結果を返し、他の処理に活用できるようにするものです。

メソッドが値を返す仕組みを理解すると、より効率的で再利用可能なコードを書くことができるようになります。

今回はこの「メソッドの戻り値」の基本と応用について解説します。

メソッドの戻り値とは?

メソッドの戻り値とはメソッドが処理を終えた後に返すデータのことです。

Rubyではメソッドの最後に評価された式の結果が自動的に戻り値として返されるのが特徴です。

例えば次のコードを見てみましょう。

def add(a, b) # aやbを仮引数という
  a + b       # この行が戻り値になる
end
puts add(10, 20) # 10や20を実引数という:結果として「30」が出力される

上記のコードではaddメソッドの最後の式a + bが自動的に戻り値となります。

最後の行の「add(10, 20)」の部分が「a+b」の計算結果、すなわち30となってputsで出力されます。

このようにRubyのメソッドは特別な指示がない限り、メソッド内で最後に実行された式の結果が戻り値となります。

戻り値の自動返却

Rubyでは戻り値を明示的に指定しなくても、メソッド内で最後に評価された式がそのまま返されます。

この仕様はRubyをシンプルに使いやすくする大きな特徴の一つです。

他の言語では戻り値を明示的にreturnで指定しなければならない場合が多いですが、Rubyでは次のように簡潔に記述できます。

def greet(name)
  "Hello, #{name}!"
end
puts greet("Ruby") # 実行結果:「Hello, Ruby!」

この例では"Hello, #{name}!"が自動で戻り値として返されます。

簡潔な記述が可能なため、Rubyは直感的にコードを書けるのが利点です。

returnによる早期リターン

Rubyのメソッドでは自動で最後の式を返すだけでなく、returnキーワードを使用して任意のタイミングで値を返すことも可能です。

これにより特定の条件を満たした時点でメソッドの処理を終了し、値を返すことができます。

例えば以下のコードでは、引数として与えられた数が負の値である場合に早期に処理を終了し、”負の数は無効です”というメッセージを返すようになっています。

def check_number(num) # 仮引数nu持つcheck_numberメソッドを定義
  return "負の数は無効です" if num < 0 # 入力が負の数だったときに早期リターン
  "数値は有効です"                     # 通常の戻り値
end
puts check_number(-5) # 実行結果:「負の数は無効です」
puts check_number(10) # 実行結果:「数値は有効です」

このようにreturnを使うことで、特定の条件が満たされた場合にメソッドから早く抜け出すことができます。

特に長いメソッドや複雑な処理で役立つテクニックです。

※このif文の書き方を忘れてしまった方はLesson2-2を復習しましょう。

戻り値を使った実践例

ここでは戻り値を使った具体的な例として、商品の割引価格を計算するメソッドを作成してみます。

割引率を引数として受け取り、その割引後の価格を返すメソッドを定義します。

def calculate_discount(price, discount_rate)
  return "価格が不正です" if price < 0 || discount_rate < 0
  discounted_price = price - (price * discount_rate / 100)
  discounted_price
end

puts calculate_discount(1000, 20) # 実行結果:800
puts calculate_discount(500, 10)  # 実行結果:450

この例ではcalculate_discountメソッドが価格と割引率を基に割引後の価格を計算し、それを戻り値として返しています。

もし価格や割引率が負の値だった場合、エラーメッセージを返すようにしており、早期リターンの使い方も活用しています。

こうした戻り値の利用方法によって、エラーチェックや値の処理を柔軟に行うことができます。

まとめ

Rubyにおけるメソッドの戻り値は、メソッドの最後に評価された式が自動的に返されるという特性を持ち、コードをシンプルに書く助けになります。

またreturnを使うことで早期に処理を終了させることも可能です。

この柔軟な戻り値の仕組みを活用することで、より効率的で読みやすいコードを書くことができるようになります。

メソッドを使う際にはこの戻り値の特性を意識して、実践に活かしてください。

メソッドの戻り値の練習問題: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の定義
  □ BMIを計算し、戻り値を設定
2:メソッドjudge_bmiの定義
  □ if文でbmiが18.5未満か判定
  □ □ 真の場合、「低体重」と戻り値を設定
  □ elsif文でbmiが18.5以上かつ25未満か判定
  □ □ 真の場合、「適正体重」と戻り値を設定
  □ else文
  □ □ 偽の場合、「肥満」と戻り値を設定
3:「身長をメートル単位で入力してください (例: 1.75):」と出力
4:ユーザーに身長を入力させ、float型に変換して変数heightに代入
5:「体重をキログラム単位で入力してください (例: 68):」と出力
6:ユーザーに体重を入力させ、float型に変換して変数weightに代入
7:calculate_bmiメソッドを呼び出し、戻り値を変数bmiに代入
8:「あなたのBMIは {bmi} です。」と出力
9:judge_bmiメソッドを呼び出し、戻り値を変数resultに代入
10:「あなたは {result} です。」と出力

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

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

# BMIを計算するメソッド
def calculate_bmi(height, weight)
  =begin
  【穴埋め問題1】
  ここでBMIを計算し、その結果を返すコードを書いてください。
  =end
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を計算し、その結果を表示する
=begin
【穴埋め問題2】
ここでcalculate_bmiメソッドを呼び出し、戻り値を変数bmiに代入するコードを書いてください。
=end
puts "あなたのBMIは #{bmi} です。"

# BMIに基づいて適正体重かどうかを判断し、結果を表示する
=begin
【穴埋め問題3】
ここでjudge_bmiメソッドを呼び出し、その戻り値を変数resultに代入するコードを書いてください。
=end
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のメソッドを使ったプログラム作成がよりスムーズになります。

<<前のページ Ruby記事一覧 次のページ>>

この記事への質問・コメント

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

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






    Rubyのテキスト&問題集トップへ戻る
    トップページへ戻る