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
を省略していますが、
省略されているだけでresult
がreturn
に渡っています。
そして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
の結果が返却されているのですね。
当たり前といえば当たり前なのですが、私は最初の例と同様の結果が得られると勘違いしていました。。