[解決済み] Rubyで明示的にreturnするのは良いスタイルか?
質問
Pythonのバックグラウンドを持つ私は、スタイルに関して常に正しい方法(Pythonicな方法)が存在するのですが、Rubyにも同じことが存在するのか疑問に思っています。私はこれまで独自のスタイルガイドラインを使用してきましたが、ソースコードを公開しようと考えており、存在するかもしれない不文律を遵守してもらいたいと考えています。
を明示的にタイプアウトするのはRuby Wayなのでしょうか?
return
メソッドの中で?あるともないとも言われていますが、正しいやり方はあるのでしょうか?もしかしたら、正しい
時間
を行うことができますか?例えば、こんな感じです。
def some_func(arg1, arg2, etc)
# Do some stuff...
return value # <-- Is the 'return' needed here?
end
解決方法は?
古い(そしてquot;answered")質問ですが、私の2セントを答えとして投げます。
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%明らかにしないのでしょうか? それは、文字通り、あなたのコードの性能に何の影響も及ぼさないでしょう。
関連
-
[解決済み】StringからIntegerへの暗黙の変換がない(TypeError)?
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
-
[解決済み] 関数は return 文を1つだけ持つべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Gemfile が見つかりません。
-
[解決済み] ルビーオールウェイズ ラウンドアップ
-
[解決済み] Rubyの配列から文字列への変換
-
[解決済み] Ruby の .reject! と .delete_if の比較
-
[解決済み] 配列をアルファベット順に並べるには?
-
[解決済み] あなたが提供した認証メカニズムはサポートされていません。AWS4-HMAC-SHA256を使用してください。
-
[解決済み] Ruby の `print` から bash スクリプトを呼び出して echo するにはどうしたらいいですか?
-
[解決済み] ファイルの存在を確認する方法 [重複]について
-
[解決済み] Rubyにバイナリ検索は組み込まれていますか?
-
[解決済み] 構文エラー、予期しない ',', 期待する ')' 。