Sven Rautenberg: bei ternär, wenn das 'else' unnötig ist

Beitrag lesen

Moin!

Du echauffierst dich vollkommen unnötig.

ist es eigtl nur eine Schöhnheitssahce?

Ja!

Nein!

Meine Begründung hast du gelesen.

Doch.

Beharrst aber trotzdem auf deinem Standpunkt. Sei dir unbenommen.

Programmieren besteht aber nicht nur aus dem, was technisch möglich ist, sondern besteht auch aus einer menschlichen Komponente. Und gerade diese Komponente ist es, die Code erstens überhaupt erst zu "Schönheitssachen" macht, die zweitens Erfahrungswerte relevant werden läßt, wenn es darum geht, einen guten oder einen besseren Weg zur Lösung zu finden, und die drittens das Auftreten von Fehlern mehr oder weniger wahrscheinlich macht.

Ich möchte etwas weiter ausholen: Ziel eines jeden professionellen Programmierers (also auch von mir und dir) ist es, Programme ohne Fehler zu schreiben. Merkwürdigerweise lassen sich aber sehr viele Fehler, die in real existierender Software auftritt, in relativ wenige Kategorien einsortieren. Mal so allgemein betrachtet: Wir haben "Buffer Overflows", "Code Injections", "Cross Site Scripting" und so weiter.

Gegen alle diese Fehlertypen sind Kräuter gewachsen: Buffer Overflows in C verhindert man, indem man nur sichere Methoden für den Stackzugriff verwendet und Speicherbereiche vor dem Schreiben auf ausreichende Länge prüft - oder nicht über das Ende des Bereichs hinausschreibt. Code Injections und Cross Site Scripting verhindert man u.a. durch das korrekte, kontextabhängige Maskieren von Steuerzeichen.

Aber wie kriegt man es, ganz allgemein gesprochen, hin, dass Programmierer (also auch du und ich) Fehler im Programmcode schnell entdecken und beheben? Einfache Antwort: Ein Fehler muß wie ein Fehler aussehen, nicht wie korrekter Code.

Denn nur wenn Fehler im Code schnell ins Auge springen, genau wie man in lyrischen Texten Abweichungen in
der
Formatierung
sofort
sieht, weil
sie das optische

Bild

stören

Lassen sich einfache Fehler vermeiden. Und die komplizierteren leichter entdecken. Das Menschliche Auge ist eben sehr stark trainiert auf das Erkennen von Mustern.

Und weil das Auge Mustererkennung in Perfektion beherrscht, muß man unter anderem Dafür sorgen, dass die Mustererkennung beim Betrachten von Programmtext sich vorrangig mit der Erkennung von Musterstörungen - die eben möglicherweise Fehler sein könnten - beschäftigt.

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.

Sowas provoziert Fehler - wie ich ja bereits in meinem ersten Posting dargelegt habe. Und solche Fehler kann man vermeiden - indem man nicht alles nutzt, was technisch möglich ist.

Geschweifte Klammern kann man genau dann weglassen, wenn nur eine einzige nachfolgende Anweisung zu diesem IF gehört.

Eben! Und darum ging es im obigen Beispiel.

Nein, die Frage war, ob es nur "Schönheitssache" sei, IF-Blöcke mit nur einer einzigen Anweisung mit oder ohne Klammern zu schreiben.

Und zur Frage "Schönheitssache" sagst du "ja" und ich "nein".

Ich für meinen Teil habe gute Gründe, fehlende Klammern als extrem unschön anzusehen.

Aus genau dem gleichen Grund "Schönheit" rücken Programmierer ihren Code ein. Schreiben KONSTANTEN NUR GROSS. Nutzen $_GET, obwohl in PHP 4 auch $HTTP_GET_VARS existiert. Schreiben Klassen, die exakt das Gleiche tun, wie verfügbare Funktionen der darunterliegenden Programmiersprache, indem sie die Methodenparameter 1:1 der Funktion weiterreichen. Und viele andere Dinge mehr.

Also ich werde mir weiterhin - trotz deines wehementen Belehrungszwanges -
die Klammern bei einer einzeiligen If-Anweisung sparen.
So einfach ist das!

Dir ist, außer der Tatsache, dass meine Antwort sich auf "Schönheitssache" bezog, auch noch entgangen, dass ich nicht DICH belehrt habe (wenn du es denn schon so sehen willst), sondern den Fragesteller han.

Hätte die menschliche Sprache mehr non-optionale Klammern, hätte ich in meinem Antworttext diesen Zusammenhang mit den Bindungen gerne deutlich gemacht. Aber zum Glück darf ich solche Klammern weglassen.

 - Sven Rautenberg

-- "Love your nation - respect the others."