phpbar.de logo

Mailinglisten-Archive

[php] Codeformatierungsphilosophie (was: Selbstkritik)

[php] Codeformatierungsphilosophie (was: Selbstkritik)

Yannik Hampe yannik at cipher-code.de
Don Jul 10 18:35:08 CEST 2008



Christian Knorr wrote:
> Am Mittwoch 09 Juli 2008 20:03:55 schrieb Christian Knorr:
>> [CODE]
>> if ( isset($_POST['language'])) {
>>         $language = $_POST['language'];
>>         } else {
>>                 $language = false;
>>                 }
>> [/CODE]
> (natürlich ohne Semikolon im if(isset()) ;-) )
> 
> [CODE]
> // (Es folgt ein Einzeiler)
> if ( isset($_POST['language'])) $language = $_POST['language']; else \
> $language = false;
> [/CODE]
> 
> Letzteres ist wohl Ressourcen schonender und "besser" bei 15 Variablen und 
> mehr. Aber auch unübersichtlicher. Ersteres lässt sich hingegen fast auf 
> einen Blick "lesen".
> Aber wie macht’s der Profi? Wie gesagt ist es mir nicht egal ob es 
> funktioniert, egal wie. Wenn schon, dann richtig.

Wieso meinst du, dass Letzteres wohl Ressourcen schonender ist? Wegen 
den fehlenden geschweiften Klammern? Also gut, es ist sicherlich 
schonender, weil der Quelltext einfach kürzer ist und der parser damit 
weniger Bytes durchsaugen muss, aber wir sprechen hier von nicht 
messbaren Unterschieden. Also wenn du da ein 0,0001%igen 
Performancegwinn rausholst, dann .... dann hast du was gewonne :-D.

Und der Profi... Da kann man sich stundenlang drüber streiten. Ich kann 
dir nur sagen, wie ich es machen würde und wieso ich es so machen würde 
und dann können dir ganz viele andere Leute noch sagen, wie sie es 
machen und wieso... Im Endeffekt ist das ganze nicht so wahnsinnig 
wichtig, weil es code-formater gibt, die du konfiguarieren kannst und 
wenn irgendwer mit code daher kommt, den du fürchterlich findest, dann 
lässt du mal einen formater mit deinen Einstellungen drüberrasseln und 
schon ist alles wie gewohnt.

Ich würde es jedenfalls so schreiben:

if (bedingung) anweisung;
else andereAnweisung

Denn in dem Fall kann ich das Konstrukt direkt voll überschauen. Ich 
sehe direkt, wenn die Bedingung wahr ist, dann die erste Zeile, sonst 
die zweite.
Und wenn es mehrere Anweisungen sind, dann so:

if (bedingung)
{
   anweisung1;
   anweisung2;
}
else
{
   anweisung1;
   anweisung2;
}

Das ganze wäre natürlich Papierverschwendung, wenn man dies ausdrucken 
würde, aber das will ich ja nicht ;-).
Das gute daran ist: Die Geschweiften Klammen fallen sofort ins Auge, die 
Kontrollstruktur hebt sich von den Befehlen ab und ich sehe sofort, von 
wo bis wo der Block geht. Bei der Formatierung:

if (bedingung) {
   bla;
   blubb;
} else {
   bla;
   blubb;
}

fällt mir das schon viel schwerer. Denn die sich öffnenden schweifenden 
Klammern sehe ich nicht sofort. Da muss ich dann genauer hinsehen. Auch 
das else würde mir eventuell entgehen, weil es gleichweit wie die 
Anweisungen eingerückt ist und die geschweiften Klammern vor und hinter 
anderen Ausdrücken nicht so ins Auge fallen (das könnte man natürlich 
verbessern in dem man die Anweisungen noch weiter einrückt, aber so gut, 
wie meine Lösung finde ich das dann immernoch nicht).

Das ganze kann man noch mit ein paar Gedanken über die Funktionsweise 
des Auges ergänzen: Das Auge sieht nur in einem sehr begrenzten Bereich 
wirklich 100%ig scharf. Aussenherum ist es alles unscharf. Das nehmen 
wir nicht wahr, aber irgendwelche Forscher haben mit solchen Sachen mal 
viel Zeit verbracht :-). Ich finde, dass sich meine Struktur auch 
unscharf sehr gut lesen lässt. Ich kann mich ein paar Meter hinter 
meinen Bildschirm stellen. Soweit, dass ich die Buchstaben gerade 
nichtmehr lesen kann. Und ich kann meine if-else Struktur immernoch 
erkennen und genau sehen, von wo bis wo der Block geht. Bei der anderen 
Struktur kann ich das else nichtmehr lesen und es sieht so aus, als 
würde alles zum if gehöhren und es würde garkein else geben.

Auch ganz interessant ist, dass dein Auge blind ist, während du es 
bewegst. Ein paar Forscher haben das herausgefunden indem sie Leute vor 
einen Bildschirm mit Text gesetzt haben, deren Pupillenbewegungen 
gemessen haben und immer, wenn sie die Pupillen bewegt haben, haben die 
einzelne Wörter auf dem Bildschirm , wo der Probant gerade nicht am 
lesen ist ausgetauscht. Und haben festgestellt, dass diese Änderungen 
nicht wahrgenommen werden. Auch dies merken wir nicht, weil das Gehirn 
uns solange ein Bild vorhält, wie wir die Pupillen bewegen. Dieses Bild 
ist allerdings natürlich wieder unscharf. Wenn man dann seine Augen sehr 
schnell über Quelltext hinweg bewegt (weil man einen Fehler sucht oder 
gerade dabei ist sich generell ein schnelles Bild davon zu machen, was 
in dem code so passiert), dann nimmt man eine ganze Menge unscharfe 
Bilder wahr. Und die Formatierung kann dazu beitragen, dass man mit 
diesen unscharfen Bildern eine Menge anfangen kann.

Ich habe mich in der Vergangenheit in meinen Codestil bestätigt gesehen, 
da ich oft den code von Freunden gedebuggt habe, die ihren Fehler in 
deren Formatierung (so in Richtung meines zweiten Beispiels) einfach 
nicht wahrgenommen haben, ob wohl die häufig simple Dinge waren (zum 
Beispiel falsch gesetzte geschweifte Klammer) ich diesen Fehler aber 
nach ein wenig Umformatierung sofort erkennen konnte.

So... Jetzt habe ich viel mehr geschrieben, als ich eigentlich wollte. 
Ist ja fast eine komplette Abhandlung über die Philosophie des 
Codeformatierens geworden.
Aber gut. Du kennst jetzt meine Meinung und du weisst wieso ich diese 
vertrete und vielleicht trägt ja noch jemand, der den anderen Stil 
vertritt seine Meinung bei (fänd ich echt gut, denn bisher war das 
einzige, was ich mal gehört habe "ich finde, dass die { da sonst so 
verloren aussieht" ;-)).

> 
> Danke schonmal, Chris......

Yannik

php::bar PHP Wiki   -   Listenarchive