他のすべての回答は、講師のルールを守ります3。
私はあなたに同意すると言いましょう:ルールは冗長であり、私はそれを助言しません。それは、それが本当だ理論的に常に中かっこを追加するはエラーを防ぐことができます。一方、私は実際にこの問題に遭遇したことはありません。他の答えが意味するところとは逆に、中括弧が必要になったときに、中括弧を追加するのを忘れたことはありません。適切なインデントを使用すると、複数のステートメントがインデントされた後に中括弧を追加する必要があることがすぐに明らかになります。
「コンポーネント10」による回答は、実際にこれが本当にエラーにつながる可能性のある唯一の考えられるケースを強調しています。しかしその一方で、正規表現を使用してコードを置き換えると、とにかく常に細心の注意が必要になります。
メダルの反対側を見てみましょう:中括弧を常に使用することには不利な点がありますか?他の答えは単にこの点を無視します。しかし、そこにあります短所:それは垂直方向の画面スペースの多くを占めており、それはあなたが必要以上にスクロールしなければならないことを意味するので、これは順番に、あなたのコードが読めなくすることができます。
最初に多くのガード句がある関数を考えてください(そうです、以下は悪いC ++コードですが、他の言語ではこれはかなり一般的な状況です):
void some_method(obj* a, obj* b)
{
if (a == nullptr)
{
throw null_ptr_error("a");
}
if (b == nullptr)
{
throw null_ptr_error("b");
}
if (a == b)
{
throw logic_error("Cannot do method on identical objects");
}
if (not a->precondition_met())
{
throw logic_error("Precondition for a not met");
}
a->do_something_with(b);
}
これは恐ろしいコードであり、以下の方がはるかに読みやすいと強く主張します。
void some_method(obj* a, obj* b)
{
if (a == nullptr)
throw null_ptr_error("a");
if (b == nullptr)
throw null_ptr_error("b");
if (a == b)
throw logic_error("Cannot do method on identical objects");
if (not a->precondition_met())
throw logic_error("Precondition for a not met");
a->do_something_with(b);
}
同様に、入れ子にされた短いループは、中括弧を省略することでメリットを得られます。
matrix operator +(matrix const& a, matrix const& b) {
matrix c(a.w(), a.h());
for (auto i = 0; i < a.w(); ++i)
for (auto j = 0; j < a.h(); ++j)
c(i, j) = a(i, j) + b(i, j);
return c;
}
と比べて:
matrix operator +(matrix const& a, matrix const& b) {
matrix c(a.w(), a.h());
for (auto i = 0; i < a.w(); ++i)
{
for (auto j = 0; j < a.h(); ++j)
{
c(i, j) = a(i, j) + b(i, j);
}
}
return c;
}
最初のコードは簡潔です。2番目のコードは肥大化しています。
そして、はい、これは前の行に開始中かっこを置くことである程度緩和できます。しかし、それでも、中括弧がないコードよりも読みにくくなります。
つまり、画面スペースを占有する不要なコードを記述しないでください。