Ruby

Returnがなんだかよくわからない


この記事の目的

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

またこの記事をみて後から、またわからなくなった時にわかるようにする。


そもそもReturnとは何なのか

Returnを使えば戻り値をメソッド呼び出し元に返すことができるとある。

これはどういうことなのか?

少し実験してみた。


sample.rb

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}です。"に変更してみる。


sample.rb

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行を省略することが可能。

省略した場合はメソッド内で最後の式を評価した値が戻り値となる。


sample.rb

def addition(num1, num2)

result = num1 + num2
end

num1 = 5
num2 = 6

result = addition(num1, num2)
puts "合計:#{result}"


実行結果は変わりません


合計:11


↑ナニイっテルンデスカ?(・・?)っていう方は下を見てください。

http://mugenup-tech.hatenadiary.com/entry/2014/07/03/195554


sample.rb

def addition(num1, num2)

result = num1 + num2
puts "#{result}" 
end

num1 = 5
num2 = 6

result = addition(num1, num2)
puts "合計:#{result}"


実行結果


11

合計:


11はメソッド内で出力しているもので、下がメソッドを呼び出した方である。

putsなどの出力した式は評価した式にはnilが返ってしますので注意ですね。