Ruby

Rubyのreturnを省略した場合の注意点

returnを省略する場合、条件によっては思い通りの戻り値が得られない場合がある。

x = -1
y = 2

def a(x, y)
  if x < 0
    y
  end
  x + y
end

def b(x, y)
  if x < 0
    return y
  end
  x + y
end

a(x, Y)
=> 1

b(x, y)
=> 2


aの場合returnを指定していないので、ifが真であれどyが返ってこない。
理由としては、returnを省略した場合、最終的に評価された値が返ってくるので、x + yが戻り値となってしまうのである。

しかし、returnを明示していた場合、それが戻り値になるので真の場合の結果が返ってくる。

ちなみに

def hoge
  return "fuga"
  return "moga"
end

returnは最初に明示したものを返すので、この場合"fuga"が返ってくるので、returnを書く場合は注意しておく。

戻り値が複数必要な場合には、コンマで区切ると配列になって戻ってくる。

  return "fuga", "moga"

個人的に、こういうことなのかな?という状態のメモなので、間違っていたらコメントお願いします。