【Ruby】returnの使い方

この記事の目的

return構文の使い方がよくわからないので少し整理してみる。

そもそもreturnとは何なのか

returnを使えば戻り値をメソッド呼び出し元に返すことができるとある。
これはどういうことなんだろうか?

実際に使って動作を確認してみました。

def addition(num1, num2)
result = num1 + num2
return result
end
num1 = 5
num2 = 6
result = addition(num1, num2)
puts "合計:#{result}"

順を追って見ていきます。

num1 = 5
num2 = 6

ここでnum1,num2に数字を代入しています。
(ここは大丈夫ですね。)

次にいきましょう。

result = addition(num1, num2)
resultという変数の右辺でadditionメソッドを呼び出していて、引数にnum1, num2を渡しています。

次にインスタンスメソッド内に入っていきます。

result = num1 + num2

メソッド内でresult変数を定義して、受け取った引数であるnum1とnum2の足し算を行っています。

次に本題のreturnのところ

return result
先ほどのresultの右辺で行った足し算の結果をメソッドの呼び出し元に返しています。

結果を確認してみるとこんな感じで帰ってきてます。

合計:11

呼び出し元であるsum = addition(num1, num2)に無事値が戻っていることがわかります。

もう少しわかりやすく書いてみる。
return resultの部分をreturn "#{result}です。"に変更してみる。

def addition(num1, num2)
result = num1 + num2
return "#{result}です。"
end
num1 = 5
num2 = 6
result = addition(num1, num2)
puts "合計:#{result}"

実行してみると下記の通りに変わっています。

合計:11です。

result = addition,,,のところで定義している以上のものが返ってきているのが分かります。

returnは省略できる

1番初めの例の場合はreturnの1行を省略することが可能。
省略した場合はメソッド内で最後の式を評価した値が戻り値となる。

def addition(num1, num2)
result = num1 + num2
end
num1 = 5
num2 = 6
result = addition(num1, num2)
puts "合計:#{result}"

実行結果は変わりません

合計:11

def addition(num1, num2)
result = num1 + num2
puts "#{result}" 
end
num1 = 5
num2 = 6
result = addition(num1, num2)
puts "合計:#{result}"

実行結果

11
合計:

11はメソッド内で出力しているもので、下がメソッドを呼び出した方である。
putsなどの出力した式は評価した式にはnilが返ってしますので注意ですね。

よくreturnが使われるケース(2018年12月13日追記)

returnはメソッドを途中で離脱する際に利用されるケースが多いようです。

ではサンプルを書いてみます。

def greetings(country)
return 'countryを入力してください' if country.nil?
if country ==  'japan'
'こんにちは'
else
'hello'
end

countryがnilの場合はreturnでメソッドから離脱するようになっています

まとめ

ここまでRubyにおけるreturn構文の書き方を実際に使ってみて整理してみました。

最後に評価した式の値を返すということで少し癖はありましたが、落ち着いて整理してみるとなんてことありませんでした。

こういう一つ一つの構文とかメソッドはちょっとでも不明な部分が出てきたら落ち着いて立ち止まってみることも大切ですね。

以上、閲覧ありがとうございました。

またこちらの記事はQiitaにも書いているので興味があればそちらも確認してみてください。

qiita.com

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です