今回は「if文の中括弧の省略はしない」という話をしていきます。
1.1 BAD:if文に中括弧を書かない
C#では,if文の中身が1行の場合は中確固{}を書かなくてもコンパイルエラーにならないので,次のようif文を書くことができます。
private void ifの中括弧の省略はしない(Product product) { //BAD:if文に中括弧を書かない if (product.Price > 100) Console.WriteLine($"処理...{product.Price}"); }
このように記述しても,すぐに何かの問題が起きるわけではありませんが,今後の改修作業を想定すると,やめておいた方がよいコードといえます。要するに,バグや機能追加などでコードを修正する際に次のような問題が発生する可能性があります。
改修時に起きうる問題
このif文はPriceと比較していますが,その結果がTrueの場合の処理を1行追加した例が次の①のようになります。
//BAD:if文に中括弧を書かない バグの元になる if (product.Price > 100) Console.WriteLine($"処理...{product.Price}"); Console.WriteLine($"処理...{product.ProductName}");//①
何が問題かはお分かりだと思います。①の部分はPriceとの比較に関係なく,常に通ってしまうロジックになっています。
実際のインデントは次のようになる
private void ifの中括弧の省略はしない(Product product) { //BAD:if文に中括弧を書かない バグの元になる if (product.Price > 100) Console.WriteLine($"処理...{product.Price}"); Console.WriteLine($"処理...{product.ProductName}");//① }
実際にインデントを合わせるとこのようになります。中確固{}が無いため,①の部分はif文の外側と判断されます。こういったバグを埋め込まないためにも,if文は中身が1行しかなくても中確固{}を書くということが推奨されています。
改行無しの1行で書く場合も同じ
改行無しの1行で書く場合も同じです。修正がはいらなければ問題が混入されることはないでしょうが,前述の通り,非推奨です。
//BAD:if文に中括弧を書かない if (product.Price > 100) Console.WriteLine($"処理...{product.Price}");
1.1 GOOD:1行でも中括弧を書く
前述の通り,if文は中身が1行でも素直に中確固{}を書くというのを推奨します。
//GOOD:1行でも中括弧を書く if (product.Price > 100) { Console.WriteLine($"処理...{product.Price}"); }
マイクロソフトのソース解析ツールのStyleCop.Analyzersでも,if文を中確固なしで書くと警告が出ます。ですのでStyleCop.Analyzersなどのコード解析ツールなどを使用して,機械的にこういったコードレビューを行うようにした方が,人間が指摘することに比べて,精神的にもいいと思います。あまりこういったケースを人間同士で指摘しあうと,険悪なムードになったりもしますので,ツールでチェックできることはツールにやらせるということがおすすめです。
1.1 コードのまとめ
//GOOD:ifの中括弧の省略はしない private void ifの中括弧の省略はしない(Product product) { //BAD:if文に中括弧を書かない if (product.Price > 100) Console.WriteLine($"処理...{product.Price}"); //BAD:if文に中括弧を書かない バグの元になる if (product.Price > 100) Console.WriteLine($"処理...{product.Price}"); Console.WriteLine($"処理...{product.ProductName}");//ここは常に通る //BAD:if文に中括弧を書かない if (product.Price > 100) Console.WriteLine($"処理...{product.Price}"); //GOOD:1行でも中括弧を書く if (product.Price > 100) { Console.WriteLine($"処理...{product.Price}"); } }