seth: klammern bei einfachen anweisungen nach "if"

Beitrag lesen

gudn tach!

Wenn Dinge, die identisches tun, immer gleich aussehen, hilft das der Mustererkennung enorm. Weil dann jegliche Abweichung von der Norm sofort kritisch unter die Lupe genommen wird:

"Aha, das IF startet seinen Block nicht mit einer geschweiften Klammer! Das ist bestimmt ein Fehler!" ...

Und an dieser Stelle geht die Geschichte dann auf zwei verschiedene Weisen weiter:

  1. "Tatsächlich, die Klammer fehlt, unten am Bildschirm wird die Klammer nämlich wieder geschlossen."

  2. "Ach nee, doch kein Fehler, das IF hat nur eine einzige Anweisung."

Je häufiger die Geschichte mit Ende Nr. 2 endet, desto unaufmerksamer wird der Programmierer beim Betrachten von IFs, bei denen nicht sofort eine Klammer den IF-Anweisungsblock eröffnet.

ich glaube nicht, dass man es sich so einfach mit der diesbzgl. ueberlegung machen darf; zum einen weil das auge mehr als nur ein zeichen gleichzeitig aufnehmen kann und zum anderen weil afaik das muster-verarbeiten stark parallelisiert im kopf ablaeuft und nicht so einfach in die uns bekannten gaengigen algorithmischen formen gepresst werden kann. insofern glaube ich umso weniger, dass man auf diese weise schliessen darf, wie du es hier getan hast.

es geht ja nicht notwendig um "unten am bildschirm", sondern normalerweise nur 1 bis 2 zeilen unter dem "if". und sobald man das "if" sieht, sieht man im selben augenblick (woertlich) auch schon genuegend von der umgebung, um zu erkennen, ob mehr als eine zeile darunter eingerueckt ist oder nicht. insofern braucht man dann bei C&R-einrueckung (keine separaten zeilen fuer oeffnende braces) gar nicht mehr den blick hinter die runde klammer nach der bedingung zu richten, um eine fehlende klammer zu suchen, und spart dann sogar zeit. und bei java-einrueckung (oeffnende braces in seperate zeilen) waer's immerhin gleich schnell/aufwaendig.
aber auch hier wird die betrachtung viel zu sehr vereinfacht, denn so ein if-konstrukt kann ja beliebig kompliziert aussehen, z.b.

if(fooooooooooooooooooooooo
   && (baaaaaaaaaaaaaaaaaar || baaaaaaaaaaaaaaaaz)
   && quux
   && quuux
  ){
    print 'hello world!'."\n";
}

bzw.

if(fooooooooooooooooooooooo
   && (baaaaaaaaaaaaaaaaaar || baaaaaaaaaaaaaaaaz)
   && quux
   && quuux
  ) print 'hello world!'."\n";

usw.

kurz: ich bleibe bei meiner behauptung, dass es geschmackssache ist, da die unterschiede (ob nun vor-/nachteile sei mal dahingestellt) in der praxis vernachlaessigbar gering sind.
aehnlich wie bei den verschiedenen indent-styles, wo uebrigens auch von verschiedenen seiten oft die zum scheitern verurteilten mustererkennungs-argumentationen angesetzt werden, spielt imho die gewohnheit eine viel wesentlichere rolle als der ganze rest.

prost
seth