この記事の目的
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にも書いているので興味があればそちらも確認してみてください。