Alle anderen Antworten verteidigen die Regel 3 Ihres Dozenten.
Lassen Sie mich sagen, dass ich Ihnen zustimme: Die Regel ist überflüssig und ich würde sie nicht empfehlen. Es ist wahr, dass es theoretisch Fehler verhindert, wenn Sie immer geschweifte Klammern hinzufügen. Andererseits bin ich im wirklichen Leben noch nie auf dieses Problem gestoßen : Im Gegensatz zu anderen Antworten habe ich nicht einmal vergessen, die geschweiften Klammern hinzuzufügen, sobald sie notwendig wurden. Wenn Sie die richtige Einrückung verwenden, wird sofort klar, dass Sie geschweifte Klammern hinzufügen müssen, sobald mehr als eine Anweisung eingerückt ist.
Die Antwort von „Komponente 10“ hebt tatsächlich den einzig denkbaren Fall hervor, in dem dies wirklich zu einem Fehler führen könnte. Andererseits erfordert das Ersetzen von Code durch reguläre Ausdrücke ohnehin immer enorme Sorgfalt.
Schauen wir uns nun die andere Seite der Medaille an: Gibt es einen Nachteil , wenn Sie immer geschweifte Klammern verwenden? Die anderen Antworten ignorieren diesen Punkt einfach. Aber das gibt es einen Nachteil: Es nimmt viel vertikalen Bildschirmplatz ein, was wiederum dazu führen kann, dass Ihr Code nicht mehr lesbar ist, da Sie mehr als nötig scrollen müssen.
Betrachten Sie eine Funktion mit vielen Schutzklauseln am Anfang (und ja, das Folgende ist schlechter C ++ - Code, aber in anderen Sprachen wäre dies eine recht häufige Situation):
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);
}
Dies ist ein schrecklicher Code, und ich behaupte nachdrücklich, dass Folgendes weitaus besser lesbar ist:
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);
}
In ähnlicher Weise profitieren kurze verschachtelte Schleifen davon, dass die geschweiften Klammern weggelassen werden:
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;
}
Vergleichen mit:
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;
}
Der erste Code ist kurz; Der zweite Code ist aufgebläht.
Und ja, dies kann bis zu einem gewissen Grad gemildert werden , indem die Öffnungsklammer auf die vorherige Zeile gesetzt wird. Aber das würde immer noch noch weniger lesbar als der Code ohne geschweifte Klammern.
Kurz gesagt: Schreiben Sie keinen unnötigen Code, der Platz auf dem Bildschirm beansprucht.