0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyでのメソッドの戻り値について勘違いしていた

Last updated at Posted at 2022-05-13

Rubyのメソッドの戻り値は、returnに渡した値です。

greeting.rb
class Greeting
  def name(num)
    if num == 1
      result = 'Tom'
    elsif num == 2
      result = 'Ken'
    else
      result = 'Yumi'
    end
    result
  end
end

greet = Greeting.new
puts "Hello,#{greet.name(1)}!!!"
puts "Hello,#{greet.name(2)}!!!"
puts "Hello,#{greet.name(3)}!!!"
実行結果
Hello,Tom!!!
Hello,Ken!!!
Hello,Yumi!!!

上記の場合はreturnを省略していますが、
省略されているだけでresultreturnに渡っています。

そしてreturnを呼び出さない場合は、メソッド内の最後の式の値を
戻り値として返却するので、以下のように書いても同じ結果になります。

greeting.rb
class Greeting
  def name(num)
    if num == 1
      result = 'Tom'
    elsif num == 2
      result = 'Ken'
    else
      result = 'Yumi'
    end
    # result
  end
end

greet = Greeting.new
puts "Hello,#{greet.name(1)}!!!"
puts "Hello,#{greet.name(2)}!!!"
puts "Hello,#{greet.name(3)}!!!"
実行結果
Hello,Tom!!!
Hello,Ken!!!
Hello,Yumi!!!

では、以下の場合はどうなるでしょうか。

greeting.rb
class Greeting
  def name(num)
    result = 'Yumi'
    if num == 1
      result = 'Tom'
    end
    if num == 2
      result = 'Ken'
    end
  end
end

greet = Greeting.new
puts "Hello,#{greet.name(1)}!!!"
puts "Hello,#{greet.name(2)}!!!"
puts "Hello,#{greet.name(3)}!!!"
実行結果
Hello,!!!
Hello,Ken!!!
Hello,!!!

なんと、引数1, 3の結果はメソッドの戻り値が出力されていません。
'return'を呼び出さない場合は、メソッド内の最後の式の値を戻り値
として返却するので、if num == 2 ~ endの結果が返却されているのですね。
当たり前といえば当たり前なのですが、私は最初の例と同様の結果が得られると勘違いしていました。。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?