Style Klammern

ThomasT

Mitglied
Hallo,

gerade im Java-Umfeld, aber in oft schlimmerer Form auch bei Javascript, trifft man häufig oder ausschließlich folgende Formatierung an:


Code:
if (ausdruck){
  anweisung1;
} else{
  anweisung2;
}

Das erscheint für viele Java-Entwickler selbstverständlich zu sein und sie haben sich daran gewöhnt. Verstehe ich. Aber man sollte das mal hinterfragen.
Das Problem ist, dass auf dem ersten Blick anweisung1, else und anweisung2 auf einer Einrückungsebene, also zusammengehörig erscheint. Man mag einwenden, dass man mehr als 2 spaces einrücken könnte, aber das ist so auch googles style guide.

Besser wäre es so. Egal ob man die öffnende Klammer dahinter oder auf neue Zeile schreibt.

Code:
if (ausdruck){
  anweisung1;
} 
else{
  anweisung2;
}

So ist alles, was auf gleicher Ebene ist, untereinander. Und es ist übersichtlich. Auch wenn man tiefer verschachtelt. In einem Java-Buch ("Hardcore Java"? "Effective Java"?) wurde erwähnt, dass man vermeiden sollte, mehr als zwei Verschachtelungsebenen zu verwenden. Man ist geneigt zu sagen: Ja, klar! Mit deiner Scheißformatierung ginge bei mir auch nach zwei Ebenen die Übersicht flöten.
Man findet diese java-übliche Formatierung in älteren C und C++ Büchern gar nicht. Ich habe gelernt, schon in BASIC, dass öffnendes und schliessendes, also alles was auf einer Ebene ist, in einer Spalte stehen sollte. Python z.B. erzwingt das sogar.

Ich habe mal nachgeforscht woher dieser Style kommt. Letztendlich ist es der interne Codestyle von Sun gewesen. Dieser hat sich mit Java verbreitet. Und erscheint heute vielen, die nicht schon vor Jahren C(++) programmiert haben, als selbstverständlich.

Gibt es eine Change, das wieder rückgängig zu machen und zumindest in als schön formatiert deklarierten Code zum vorzeigen wieder zur Regel, zusammengehöriges und gleichtiefes in die selbe Spalte zu schreiben?

Besondern im Rahmen von JSON und Javascript begegnet einen auch folgende Formatierung:

Code:
"aaaaaa" : [ {"id" : 427,
    "bbb" : "qqq",
    "ccc" : "thomas",
    "columns" : [ {
      "id" : 25,
      "value" : "bbbb",
    }, {
      "id" : 26,
      "fieldName" : "eeee",
      "value" : "0815",
    }, {
      "id" : 24,
      "fieldName" : "fff",
      "value" : "0815",
    } ],
   } ]
  },

Das ist, wenn man editieren will, total unübersichtlich. Auch hier wäre es so besser.

Code:
"aaaaaa" : [
  {
    "id" : 427,
    "bbb" : "qqq",
    "ccc" : "thomas",
    "columns" : [
      {
        "id" : 25,
        "value" : "bbbb",
      },
      {
        "id" : 26,
        "fieldName" : "eeeeee",
        "value" : "0815",
      },
      {
        "id" : 24,
        "fieldName" : "fffff",
        "value" : "0815",
      }
    ],
  }
]

Meint ihr, dieses Bewusstsein für sinnvolle Formatierung könnte man wieder etablieren? Wenn die Antwort ist, nein, das braucht man nicht, die IDE bereitet das schon hübsch auf, dann kann man auch auf jede Formatierung und Styleguide verzichten.

Was meint ihr?

Gruß Thomas
 

VfL_Freak

Top Contributor
Moin,
ist vielleicht alles ein bisschen Geschmackssache, aber uns wird (sowohl in Java las auch in C++) nur SO geklammert:
Java:
if( ausdruck )
{
    anweisung1;
} 
else
{
    anweisung2;
}

Alles andere kann auch IMHO schnell unübersichtlich werden !!

VG Klaus
 

X5-599

Top Contributor
Bei der Position der geschweiften Klammern bin ich ganz bei dir, aber wenn ich die Spaces vor/nach dem ausdruck sehe ... Da zuckt mein linkes Auge ;)
 

Robat

Top Contributor
Ich glaube schon, dass jeder (jede Firma) für sich entscheiden sollte, wie ihr Style Guidline auszusehen hat.
Es bleibt eben Geschmackssache wie man die Klammern setzt.
Ich setze bspw ausschließlich darauf die öffnende Klammer in die gleiche Zeile zusetzen.
 

Wurstkopp

Bekanntes Mitglied

mrBrown

Super-Moderator
Mitarbeiter
Man findet diese java-übliche Formatierung in älteren C und C++ Büchern gar nicht. [...]
Ich habe mal nachgeforscht woher dieser Style kommt. Letztendlich ist es der interne Codestyle von Sun gewesen. Dieser hat sich mit Java verbreitet. Und erscheint heute vielen, die nicht schon vor Jahren C(++) programmiert haben, als selbstverständlich.

Bekannt ist er u.a. als 1TBS (one true brace style) und kommt nicht von Sun, sondern - nicht erschrecken - u.a. von Thompson, Kernighan und Ritchie - mehr "C" geht ja wohl nicht? ;)

Wird z.B. in den ganz alten Unix-Kerneln (so etwa 20 Jahre vor Java) und im Linux-Kernel verwendet.

(so viel zu deinen Nachforschungen...)


Besser wäre es so. Egal ob man die öffnende Klammer dahinter oder auf neue Zeile schreibt.

Code:
if (ausdruck){
  anweisung1;
}
else{
  anweisung2;
}

So ist alles, was auf gleicher Ebene ist, untereinander. Und es ist übersichtlich. Auch wenn man tiefer verschachtelt.
[...]
Ich habe gelernt, schon in BASIC, dass öffnendes und schliessendes, also alles was auf einer Ebene ist, in einer Spalte stehen sollte. Python z.B. erzwingt das sogar.

Deine Begründung kann man auch für den typischen Sun-Stil nutzen ;)

Bei einem } else { steht die "Fortführung" das gesamten if's in einer Zeile und in der gleichen Tiefe, wie das if selber.

Bei einem Trennen des ganze über zwei (oder sogar drei) Zeilen reißt man das ganze nur auseinander, obwohl es semantisch zusammen gehört.


In einem Java-Buch ("Hardcore Java"? "Effective Java"?) wurde erwähnt, dass man vermeiden sollte, mehr als zwei Verschachtelungsebenen zu verwenden. Man ist geneigt zu sagen: Ja, klar! Mit deiner Scheißformatierung ginge bei mir auch nach zwei Ebenen die Übersicht flöten.

Ich hoffe doch, eine möglichst geringe Einrückungstiefe wird in jedem halbwegs sinnvollen Buch zu jeder Sprache erwähnt.
Das hat allerdings wenig mit der Unübersichtlichkeit der Einrückung zu tun, sondern mehr mit dem Verständnis des jeweiligen Codes.

Eher geht es dabei um die Komplexität und Semantik der Funktion - wenn die mehr als zwei geschachtelte ifs/schleifen/whatever hat, ist unübersichtlich, was die Funktion tut und dies oftmals auch einfach zu komplex.

Schönes Zitat dazu:
Linus Torvalds hat gesagt.:
If you need more than 3 levels of indentation, you're screwed anyway, and should fix your program.
 

X5-599

Top Contributor
Bei meinem Zeile/Minute Output ... Ich hoffe nicht :)

Mir geht es dabei weniger um die Einrückung sondern mehr darum, dass eben mehr Abstand zwischen den Zeilen ist. So sind die anweisung1 Zeilen und anweisung2 Zeilen weit genug voneinander entfernt um nicht ausversehen "Im falschen Zweig gelesen zu werden".
 

thecain

Top Contributor
Meint ihr, dieses Bewusstsein für sinnvolle Formatierung könnte man wieder etablieren? Wenn die Antwort ist, nein, das braucht man nicht, die IDE bereitet das schon hübsch auf, dann kann man auch auf jede Formatierung und Styleguide verzichten.
Sinnvoll ist ansichtssache, da brauchts halt vorgaben vom Projekt oder der Firma.
Immer die IDE machen lassen führt zu ganz vielen Changes in der Versionskontrolle und ist nicht so übersichtlich, wenn jeder jedesmal alles umformatiert.
 

Ähnliche Java Themen

Neue Themen


Oben