ほとんどの場合、これは個人的な好みですが、考慮すべきことがいくつかあります。
考えられるバグ
アドインする括弧を忘れ起因するバグが、私がしてきたことから、稀であると主張することができますが見られる ことを 、彼らは ない 起こる 時折(有名忘れないようにIOSの後藤が失敗するバグを)。ですから、これはあなたのコードスタイルを考慮するときの要因になるべきだと思います(一部のツールは誤解を招くようなインデントについて警告するので、ツールチェーンにも依存します)。
有効なコード(それはそれはのように読み込むかもしれないバグ)
プロジェクトがそのようなバグに悩まされていないと仮定しても、コードを読むと、バグのように見えるコードのブロックが表示される場合がありますが、そうではありません。
まずは:
if (foo)
bar();
開発者が便利なコメントを追加します。
if (foo)
// At this point we know foo is valid.
bar();
その後、開発者がそれに展開します。
if (foo)
// At this point we know foo is valid.
// This never fails but is too slow even for debug, so keep disabled.
// assert(is_valid(foo));
bar();
または、ネストされたブロックを追加します。
if (foo)
while (i--) {
bar(i);
baz(i);
}
または、マクロを使用します。
if (foo)
SOME_MACRO();
「...マクロは複数行のコードを定義する可能性があるため、マクロdo {...} while (0)
は複数行に使用しますか?それは、スタイルガイドにあるはずですが、念のために確認した方が良いでしょう!」
上記の例はすべて有効なコードですが、コードブロックのコンテンツが多いほど、間違いがないことを確認するためにより多くの情報を読む必要があります。
あなたのコードスタイルは、複数行のブロックが中括弧を必要とすることを定義しているかもしれません(たとえコードでなくても)、実稼働コードにこれらの種類のコメントが追加されているのを見てきました。あなたがそれを読んだとき、最後にそれらの行を編集した人がブレースを追加するのを忘れたという若干の疑いがあります。
差分ノイズ
単一行にブレースを使用する実用的な理由の1つは、差分ノイズを減らすことです。
つまり、変更:
if (foo)
bar();
に:
if (foo) {
bar();
baz();
}
...条件付きの行が変更されるとdiffに表示されます。これにより、小さいが不要なオーバーヘッドが追加されます。
- コードレビューでは行が変更されているように表示されます。差分ツールが単語ベースの場合、ブレースのみが変更されたことが簡単にわかりますが、行がまったく変更されていないかどうかを確認するには時間がかかります
とはいえ、すべてのツールが単語ベースの差分をサポートしているわけではないため、差分(svn、git、hg ...など)は、派手なツールであっても、行全体が変更されたかのように表示されます。 -based diffで変更内容を確認します。
- 注釈ツール(など
git blame
)は変更された行を表示し、行の原点を追跡して実際の変更を見つけるステップを増やします。
これらはどちらも小さく、変更されたコード行をコミットするコードレビューまたは追跡に費やす時間に依存します。
diffで余分な行を変更することのより具体的な不便さは、コードの変更が競合を引き起こし、マージして手動で解決する必要があるという可能性が高いことです。
これには例外があり{
ます。独自の行にあるコードベースの場合は問題ありません。
差分ノイズあなたはこのスタイルで書く場合は引数が保持していません。
if (foo)
{
bar();
baz();
}
ただし、これはそのような一般的な規則ではないため、主に完全性の答えに追加します(プロジェクトがこのスタイルを使用することを示唆していない)。