Frage von Mauricejunior, 34

Manchmal stoße ich Schwierigkeit, dass ich nicht weiß, wann ich geschweifte Klammer vor einer "for" eine "if oder eine "while" einsetzen sollte.?

Antwort
von TeeTier, 6

Du kannst dir angewöhnen, IMMER geschweifte Klammern zu setzen!

Tust du das nicht, wird es zu Fehlern führen, die mal mehr und mal weniger schwer aufzuspüren sind.

Außerdem liest sich der Code dann besser.

Nur weil dir die Programmiersprache einige Freiheiten lässt, heißt das noch lange nicht, dass du sie auch ausnutzen musst.

Durch Klammern kannst du auch explizit ausdrücken, was du meinst, um Missverständnisse zu vermeiden:

if (foo == bar)
lorem();

if (baz == qux)
ipsum();
else
dolor();

... ist ein Fehler, wenn das gemeint ist, was die Einrückung suggeriert; dann doch lieber so:

if (foo == bar) {
lorem();

if (baz == qux) {
ipsum();
}
} else {
dolor();
}

Merk dir einfach: IMMER klammern! Immmmmmmööööörrrrr! Gerade als Anfänger ersparst du dir dadurch viele Scherereien!

Mit Klammern bist du einfach EINDEUTIG auf der sicheren Seite.

PS: Viele bekannte Sicherheitslücken kommen durch weggelassene Klammern zustande. Das passiert also auch Profis!

Ich programmiere seit zich Jahren, aber ich würde mir NICHT zutrauen fehlerfrei ohne durchgehende Klammerung zu programmieren. Flüchtigkeitsfehler unterlaufen einem schneller, als man denkt. Und alleine aus diesem Grunde sollte man diese potentielle Fehlerquelle ausschalten. Es kostet ja keine zusätzliche Arbeit. ;)

Antwort
von nikolaiki, 15

Hinter eine If Anweisung gehoert ein einzelner Befehl oder ein Befehlsbock (compound statement) , also

if (cond) statement;; oder
if (cond) {statement1; statement2; ...}

Jedes Statement im Anweisungsblock kann wieder ein Block sein.

Wirklich kompliziert wird es erst in solchen Konstruktionen:
if (cond1) if(cond2) bla; else blabla; 

Wohin gehoert das else?
if (cond1) {if(cond2) bla; else blabla;} 
if (cond1) {if(cond2) bla;} else blabla;

Wenn man sich nicht sicher ist, lieber eine geschweifte Klammer mehr als eine zu wenig.

Kommentar von regex9 ,

Und eine gescheite Formatierung mit Zeilenumbrüchen und Einrückungen wäre schön. Dann kann man sich bei verschachtelten Konditionen mit nur einem Ausdruck bspw. die geschweiften Klammern sparen.

Kommentar von nikolaiki ,

Der Ratschlag immer geschweifte Klammen zu verwenden, ist nur eine Teillösung, da man auch fremden Code lesen können muss.

if(cond1)
if(cond2) statement1;
else statement2;

Wohin gehoert das else?
if(cond1) { if(cond2) statement1; else statement2; }
if(cond1) { if(cond2) statement1; } else statement2;
Antwort
von rmnstr, 21

Es ist bei allen dreien immer dasselbe Schema. Geschweifte Klammern kannst du immer setzen. Es ist nur nicht notwendig, wenn du nur einen Befehl im jeweiligen Block hast. Ich setze der Übersicht wegen beispielsweise immer geschweifte Klammern.

for(...) {
...
}

while(...) {
...
}

if(...) {
...
}
Kommentar von regex9 ,

Ergänzend:

Variableninitialisierungen müssen ebenso immer im Block stehen. Hier ein Beispiel:

int a = 1, b = 1;

if(a == b) { int c = a; }

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten