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
/を付けて長い形式で記述した方がよいでしょう。end
a+10
スタイルの観点から、その「重要な」部分a+10
、行末の , を隠すことは悪いことであり、見落とされる可能性があります。それを最後の行にすることで、非常に明確になります。これはif
、長い行の最後にステートメントを追加するのも良くない理由でもあり、行が条件付きでのみ実行されることを隠します。
簡潔さへの懸念は、読みやすさへの懸念によって常に打ち負かされます。ディスクに数バイトを保存しても、誰かがコードを読み違えたために重大なバグが発生した場合、少しも役に立ちません。
あなたが自分の賢さに巻き込まれたとき、誰かが将来あなたになることができるということ。ある時点で、それは私たち全員に起こりました。