【Ruby】レッスン3-03:戻り値の使い方とreturnの基本を学ぼう

一つ前のページではデフォルト引数とキーワード引数について学習しました。
今回は メソッドの戻り値 について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
・Lesson3-1:メソッドの基本を理解しよう
・Lesson3-2:デフォルト引数とキーワード引数を理解しよう
・Lesson3-3:メソッドの戻り値を理解しよう ◁今回はココ
・Lesson3-4:真偽値を返すメソッドを理解しよう
・Lesson3-5:エラーメッセージを読めるようになろう
・Lesson3-6:例外処理を理解しよう
・確認問題3-☆1:石取りゲームを作ろう
・確認問題3-☆2:丁半賭博ゲームを作ろう
Lesson4:コレクション編
Lesson5:オブジェクト指向編
Rubyの戻り値とは?returnとの使い分けを理解しよう

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では戻り値を明示的に指定しなくても、メソッド内で最後に評価された式がそのまま返されます。
この仕様は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(体格指数)を計算し、その値に基づいて「低体重」「適正体重」「肥満」のいずれかを判断するプログラムを作成します。
BMIを計算するメソッドと、その値に基づいて判定を行うメソッドの戻り値の仕組みを理解することが目標です。
以下の要件に従ってコードを完成させてください。
calculate_bmi
メソッドを定義し、引数として身長(メートル単位)と体重(キログラム単位)を受け取り、BMIを計算してその値を返すこと。- BMIの計算方法は次の式を使用する:
BMI = 体重(kg) ÷ (身長(m) × 身長(m))
- BMIの計算方法は次の式を使用する:
judge_bmi
メソッドを定義し、引数としてBMIの値を受け取り、その値に基づいて「低体重」「適正体重」「肥満」のいずれかを文字列で返すこと。- 判定基準は次の通り:
- BMI < 18.5: 「低体重」
- 18.5 <= BMI < 25: 「適正体重」
- BMI >= 25: 「肥満」
- 判定基準は次の通り:
- ユーザーから身長と体重をメートルとキログラム単位で入力してもらい、BMIを計算して結果を表示すること。
- 計算された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} です。"
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
BMIを計算するメソッド
def calculate_bmi(height, weight) weight / (height * height) end
この部分では
calculate_bmi
というメソッドを定義しています。このメソッドは2つの引数
height
(身長)とweight
(体重)を受け取り、それを元にBMIを計算します。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のメソッドを使ったプログラム作成がよりスムーズになります。
FAQ|Rubyの戻り値の使い方と実践活用
- Q1. Rubyのメソッドで戻り値がないとどうなりますか?
-
Rubyではメソッドの最後に評価された式が戻り値として返される仕様です。そのため、特に戻り値を指定しない場合でも、最後の処理結果が自動的に返されます。ただし、明確に何も返したくない場合は
return nil
を明示するのがベストプラクティスです。
- Q2. returnを使う場合と使わない場合の違いは何ですか?
-
return
を使うと処理の途中で明示的にメソッドを終了し、任意のタイミングで値を返すことができます。特に条件分岐によって早期に処理を終えたい場合に便利です。一方で単純なメソッドでは最後の行を戻り値にすればコードが簡潔になります。
- Q3. Rubyの戻り値を複数返すことは可能ですか?
-
はい、可能です。Rubyでは配列やハッシュを利用することで、複数の値を一度に戻すことができます。例えば
return [name, age]
のように記述すれば、複数の値をまとめて返すことができ、受け取り側で分割して利用することもできます。