Ruby で実行できる多くのことと同様に、それらの多くは実行すべきではなく、これもその 1 つです。
他の機能が既にある場合にコードをグループ化するためにブラケットを使用すると、混乱を招く可能性があり、多くのコーディング スタイル ガイドに反することはほぼ確実です。私が管理しているコードでこれを見つけたら、すぐに修正します。
最善の方法は、begin/endマーカーを使用して、何が起こっているのかを完全に明確にすることです。
def app_logger
@app_logger ||= begin
logfile = File.open(::Rails.root.join(LOG_FILE), 'a')
logfile.sync = true
AppLogger.new(logfile)
end
end
Ruby では多くのものが 1 つの値に評価されますが、 の内容(...)は明らかにそれらの 1 つです。
foo ||= (a=10; a+10)「より良い」というあなたの他の例も、かなり物議を醸しています。これは 2 つの代入と加算を行いますが、条件付きでのみです。これはほとんどの場合、結果を明確にするためにbegin/を付けて長い形式で記述した方がよいでしょう。enda+10
スタイルの観点から、その「重要な」部分a+10、行末の , を隠すことは悪いことであり、見落とされる可能性があります。それを最後の行にすることで、非常に明確になります。これはif、長い行の最後にステートメントを追加するのも良くない理由でもあり、行が条件付きでのみ実行されることを隠します。
簡潔さへの懸念は、読みやすさへの懸念によって常に打ち負かされます。ディスクに数バイトを保存しても、誰かがコードを読み違えたために重大なバグが発生した場合、少しも役に立ちません。
あなたが自分の賢さに巻き込まれたとき、誰かが将来あなたになることができるということ。ある時点で、それは私たち全員に起こりました。