LoginSignup
17
11

More than 3 years have passed since last update.

ruby 返り値 と nil

Last updated at Posted at 2016-10-08

* 初投稿 返り値について初めて躓いたのでメモ

 そもそも、「返り値とは、プログラム中で呼び出された関数やメソッド、サブルーチンなどが処理を終了した際に、呼び出し元に対して渡す値」である。

[1] pry(main)> puts "hello world"
hello world
=> nil

puts でhello worldを出力させています。

注意ですが、「hello world はputsによってコンソールに標準出力されただけで、返り値ではない」ということです。

ここでの返り値は、=> nil です。これは、putsに対しての返り値になります。

公式によると、
putsはRubyで何かを出力する基本的なコマンドです。 では、=> nilは何でしょうか? これはこのコマンドの評価結果です。 putsは必ずnilを返します。nilは、「まったく何もない」ことを表すRubyの「値」です。

では、次にメソッド hogeを下記のように定義し実行してみます。

[13] pry(main)> def hoge
[13] pry(main)*   puts "hello world"
[13] pry(main)* end
=> :hoge

実行してみると、

[15] pry(main)> hoge
hello world
=> nil

ここで一つ疑問がでます。
それは, hello world はメソッド hoge の「返り値」なのかどうかです。 

 冒頭で説明した、
「返り値とは、プログラム中で呼び出された関数やメソッド、サブルーチンなどが処理を終了した際に、呼び出し元に対して渡す値」だとすれば、メソッド hoge の返り値はhello worldなのか?!?!?!?

結論からいうとメソッド hoge の「返り値」はnilです。

変数aにメソッドhogeの返り値を代入してみます

[59] pry(main)> def hoge
[59] pry(main)*   puts "hello world"
[59] pry(main)* end
=> :hoge
[60] pry(main)> a = hoge
hello world
=> nil
[62] pry(main)> a
=> nil

次に、変数bにメソッドfugaの返り値を代入してみます

[70] pry(main)> def fuga
[70] pry(main)*   puts "good night world"
[70] pry(main)*   return "new world"
[70] pry(main)* end
=> :fuga
[71] pry(main)> b = fuga
good night world
=> "new world"
[72] pry(main)> b
=> "new world"

ここで分かるのは、
変数aに代入されているのは => nil

変数bに代入されているのは => "new world"

それぞれhoge, fugaの返り値が代入されているのがわかります。

メソッド fuga では、
puts "good night world"でコンソールに標準したあと、return で指定された"new world"返り値として戻ってきています。

また、
hoge2 という何も処理のない(返す値のない) メソッドを定義し、変数cに代入してみます。

[74] pry(main)> def hoge2
[74] pry(main)* end
=> :hoge2
[75] pry(main)> c = hoge2
=> nil
[76] pry(main)> c
=> nil

変数cにはメソッド hoge2の返り値=> nilが代入されています。

ここまでで分かるのは、メソッドはreturnなりで、返す値を指定されていない場合、返り値がないので、
=> nil
を返り値として返します。

つまり、putsがnilを返すのも同じ理由です。

余談ですが、
putsと同じようなものに、pメソッドというものもあります。

[102] pry(main)> p "test"
"test"
=> "test"

こちらは標準出力をしたあと、返り値としても指定した文字列が返ってきます。

17
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11