Ruby で明示的に return するのは良いスタイルですか? 質問する

Ruby で明示的に return するのは良いスタイルですか? 質問する

Python のバックグラウンドから来ると、スタイルに関しては常に「正しい方法」(「Python 的な」方法) が存在するので、Ruby にも同じものがあるかどうか疑問に思っています。私は独自のスタイル ガイドラインを使用してきましたが、ソース コードをリリースすることを考えているため、存在する可能性のある暗黙のルールを遵守したいと考えています。

メソッド内で明示的に入力するのが「Ruby流」なのでしょうかreturn? 私はそれを行ったり行わなかったりしたことがあるのですが、正しいやり方はあるのでしょうか? 正しいやり方があるのでしょうか?時間それを実行するにはどうすればよいでしょうか? たとえば:

def some_func(arg1, arg2, etc)
  # Do some stuff...
  return value # <-- Is the 'return' needed here?
end

ベストアンサー1

古い(そして「回答済み」の)質問ですが、回答として私なりの意見を述べたいと思います。

TL;DR - 必ずしもそうする必要はありませんが、場合によってはコードをより明確にすることができます。

明示的な return を使用しないことは「Ruby のやり方」かもしれませんが、なじみのないコードを扱うプログラマーや、Ruby のこの機能になじみのないプログラマーにとっては混乱を招きます。

少し不自然な例ですが、渡された数値に 1 を加えてインスタンス変数に割り当てるような、次のような小さな関数があると想像してください。

def plus_one_to_y(x)
    @y = x + 1
end

これは値を返す関数だったのでしょうか、それともそうではなかったのでしょうか? インスタンス変数を割り当てるだけでなく、割り当てられた値も返すため、開発者が何を意図していたのかを判断するのは非常に困難です。

ずっと後になって、別のプログラマー (おそらく Ruby が最後に実行されたコード行に基づいてどのように戻るかをあまりよく知らない) がやって来て、ログ記録用の print ステートメントをいくつか追加したいと考え、関数が次のようになるとします...

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

しかし、なぜ return という単語を省略するのでしょうか? 単に return を入れて、何が起こっているのかを 100% 明確にしてはいかがでしょうか? コードの実行能力にはまったく影響しません。

おすすめ記事