古い(そして「答えられた」)質問ですが、答えとして2セントで投げます。
TL; DR-必須ではありませんが、場合によってはコードをより明確にすることができます。
明示的な戻り値を使用しないことは「Rubyの方法」かもしれませんが、見慣れないコードで作業しているプログラマーや、Rubyのこの機能に慣れていないプログラマーを混乱させます。
これはやや工夫された例ですが、このような小さな関数があり、渡された数値に1を加えてインスタンス変数に割り当てる関数を想像してください。
def plus_one_to_y(x)
@y = x + 1
end
これは、値を返す関数か、そうでないか?どちらもインスタンス変数を割り当て、かつ割り当てられた値も返すため、開発者が何を意味しているかを言うのは本当に難しいです。
ずっと後に、別のプログラマー(おそらく、実行されたコードの最後の行に基づいてRubyがどのように戻るかになじみがないかもしれません)がやって来て、ロギングのためにいくつかの印刷ステートメントを入れたいと思います、そして関数はこれになります...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
これで、戻り値が必要なものがあれば関数は壊れます。戻り値を期待するものがなければ、問題ありません。明らかに、コードチェーンのさらに下のどこかで、これを呼び出す何かが戻り値を期待している場合、期待どおりに戻らないため、失敗します。
本当の質問はこれです:戻り値を本当に期待しているものはありますか?これは何かを壊しましたか?それは将来何かを壊しますか?知るか!すべての呼び出しの完全なコードレビューのみが通知します。
したがって、少なくとも私にとって、ベストプラクティスアプローチは、重要な場合は何かを返すことを非常に明示的にするか、そうでない場合は何も返さないことです。
したがって、小さなデモ関数の場合、値を返すようにしたいと仮定すると、次のように記述されます...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
そして、それが値を返すことはプログラマーにとって非常に明確であり、実現することなくそれらを破壊することははるかに困難です。
あるいは、このように書いて、returnステートメントを省略することもできます...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
しかし、なぜ「戻る」という単語を省く必要があるのでしょうか。そこに入れて、何が起こっているのかを100%明確にしないのはなぜですか?文字通り、コードの実行能力には影響しません。