PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Über die große Kunst des Kommentierens

Es ist wahrscheinlich der tausendste Artikel eines Programmierer Blogs übers Kommentieren. Nicht wird so oft angeprangert und trotzdem scheint es nicht besser zu werden. Jetzt kippe ich mein Fett auch noch ins Feuer und hoffe das Beste ;)

Was sollte man beim Kommentieren unbedingt beachten? Wann ist ein Kommentar gut, wann verbesserungswürdig und wann überflüssig?

  1. In den Kopfbereich jeder Datei gehört ein Kommentar, damit man weiß, was der Zweck dieser Datei ist.
  2. Vor jede Klassendefinition sollte man einen Kommentar anbringen, der den Zweck der Klasse beschreibt. Wenn eine Datei eine einzige Klassendefinition beinhaltet, kann man Punkt 1 vergessen :)
  3. Das gleiche gilt für Funktionen. Kurz den Zweck der Funktion beschreiben, dann die Parameter und eventuell mögliche Werte listen.
  4. Dito für Membervariablen.
  5. Inline-Kommentare (direkt im Funktionscode) sollten nicht erklären, was passiert, sondern warum. Wenn man beschreiben muss, was man gerade macht, ist der Code selbst nicht aussagekräftig.
  6. Inline-Kommentare sollten auf der Höhe des Codes stehen. Wenn es eine super kurze Codezeile ist, dann gerne auch danach.
  7. Kommentare müssen immer im sichtbaren Bereich des Editors bleiben, damit man sie beim durchscrollen nicht übersieht.
  8. Bei mehrzeiligen Kommentaren darauf achten, dass jede neue Kommentarzeile auf der gleichen Höhe beginnt.
  9. Entweder für die Kommentare ein definiertes Format im Sinne von JavaDoc bzw. phpDocumentor verwenden oder einen eigenen Guide entwickeln, der lückenlos dokumentiert ist.
  10. In den Kommentaren im Kopfbereich weitgreifende Änderungen im Sinne eines Changelogs festhalten. Hierzu Datum, Änderung und Name des Autors nennen. Unwichtige Änderungen gehören hier nicht rein, die müssen in einem externen Trackingsystem notiert werden.
  11. Wenn Änderungen im Quellcode stattfinden - auf jeden Fall überprüfen, ob die Kommentare noch passen. Besonders gerne werden dann die Kommentare im Kopfbereich vergessen!

Ich möchte nochmal auf Punkt 5 eingehen. Der Code selbst sollte schon lesbar sein. Muss man beschreiben, WAS man gerade mit einer Zeile bezweckt, läuft etwas schief.

Ein kleines Beispiel zur Freude meiner Kollegen und ein Rätsel für alle anderen Mitleser: Was passiert hier?

$cum->login($u, $p, $userdao);

Keine Ahnung? Einen blassen Schimmer? Natürlich ist das arg stilisiert. Aber so soll es in der freien Wildbahn öfter vorkommen ;) Jetzt nochmal selbst beschreibend:

$user->login($username, $password);

Jetzt besser? Das DAO hat an dieser Stelle nix zu suchen. Und cum bitte nicht mit einschlägigen Bildern dokumentieren, gemeint war hier: CommunityUserManagement ;) Ich denke wir sind uns alle einig, das man an solch einer Zeile nichts kommentieren muss.

Eventuell ist es gut, bei einer Funktion oder Klasse den Einsatz näher zu beschreiben:

  • Wann wird die Funktion aufgerufen?
  • Wann sollte ich diese Klasse verwenden?
  • Wann auf gar keinen Fall? (Wenn es Alternativen gibt)

Wenn eine Funktion eine Ausgabe macht und direkt etwas herausschickt sollte man das auf jeden Fall in einem Kommentar erwähnen, sofern es nicht schon aus dem Funktionsbezeichner hervorgeht.

  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Sergej meint dazu:

25. Oktober 2007 um 10:16

Sprichst mir aus der Seele. Und ich liebe Funktionskommentare a la phpDocumentor (siehe wpSEO-Code). Danke für die Zusammenfassung.

Zustandsforschung meint dazu:

25. Oktober 2007 um 10:52

Was ich auch noch ganz wichtig finde, was aber oft vergessen wird: Wenn man den Code ändert, sollte man sich ansehen, ob der Kommentar dazu überhaupt noch Sinn macht. Es ist ganz gefährlich irreführende Kommentare im Code zu haben, die etwas beschreiben, was so gar nicht mehr implementiert ist.

timi meint dazu:

25. Oktober 2007 um 12:12

Benedikt, ich bin ganz Deiner Meinung - das nehme ich gleich mal in die Liste auf!

Sebastian meint dazu:

2. November 2007 um 22:36

dem kann ich nicht zustimmen. ich sehe so oft, dass jede mini funktion nen kommentar hat, die größer als die funktion selbst ist….und je größer die funktion, desto größer der kommentar. ich selbst kann diese nicht ausstehen.

auch muss nicht jede mini variable sofort kommentiert werden. was ist an $sorting so unverständlich das ich noch dabei schreiben muss “Gibt die art der sortierung an”. das einzigste was ich hier erwarten würde, wäre eine werte tabelle ala “TRUE = Aufsteigend Sortieren, FALSE = Absteigend sortieren”. gibts aber nirgends. auch steht bei jedem 2. script “__construct() - konstruiert das object”…..sowas entferne ich mit genuss….

das allerwichstigste ist, wie du ja sagst, aussagekräftige namen _OHNE_ abkürzungen zu nehmen und eine übersicht (am besten außerhalb des codes) zu schaffen, wann was aufgerufen und was gemacht wird….

timi meint dazu:

4. November 2007 um 08:33

Hi Sebastian,

wenn selbst Membervariablen kommentiert sind, ist das ein Indiz für den Einsatz eines Doku-Generators, der die speziell formatierten Kommentare auswertet und daraus eine technische Dokumentation generiert.

Einen Konstruktor mit “Konstruktor” zu kommentieren, zeugt wirklich nicht von geistiger Größe ;) Aber es soll auch dem einen oder anderen Profientwickler schon passiert sein…

Meist bin ich übrigens der meinung, dass eher die kleinsten Funktionen die größsten Kommentare benötigen, weil oft mehr im Hintergrund implizit passiert, als kommentiert ist.

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung