am 21. Juni 2010
Im Informatikstudium erfährt man in einem Fach das man auf “Softwareentwicklung” verallgemeinern kann meistens wie wichtig es ist SÄMTLICHEN Quellcode zu dokumentieren. Als Grundgedanke ist das auch absolut erstrebenswert doch möchte ich hier nochmal die Frage aufwerfen wann zu viele bzw. falsche Kommentare mehr schaden als nutzen.
Nils hat sich vor längerer Zeit schon einmal mit Kommentaren direkt im Quellcode beschäftigt und damit wie man sie durch bessere Methodennamen vermeiden kann. Außerdem gib es im PHP-Magazin einen sehr schönen Artikel zum Kommentar-Smell.
Meine Argumentationsgrundlage soll hier “Zeit” sein. Sourcecode wir öfter gelesen als geschrieben und sollte so geschrieben werden, dass er schnell erfassbar und verständlich ist. Deswegen einigen wir uns für Projekte auf Coding-Standards und nehmen uns – meistens/hoffentlich – Zeit dafür Methoden aussagekräftig zu benennen.
Etwas Beispielcode der gerne auch mal mit dem Satz “Ihr habt gesagt ich soll alles dokumentieren !” einhergeht und mir physischen Schmerz bereitet.
<?php
class meineKlasse {
/**
* Konstruktur
*/
public function __construct() {
}
// ... Methoden der Klasse
}
Dieser Code ist auf mindestens zwei Ebenen verstörend.
Der Kommentar absolut überflüssig. Er beinhaltet keinerlei Information und hilft niemandem der auch nur ein kleiner bischen PHP kann weiter. Das Einzige das er erreicht ist, dass jeder der die Klasse öffnet ihn ggf. kurz überfliegt und damit Zeit verschwendet.
Wie wäre es mit “Erstellt eine Instanz von meineKlasse” ?
Das wäre noch schlimmer, mehr Wörter, mehr Zeit, immer noch keine Information und beim umbenennen der Klasse müsste man ihn auch noch anpassen.
Ich finde hier kann man sich den kompletten DocBlock sparen. Wenn ihr euch in eurem Projekt darauf geeinigt habt, dass alles einen DocBlock hat, würde ich vorschlagen den einfach leer zu lassen. Wenn das auch nicht erlaubt ist würde ich sehr gerne von euch hören wieso und euch ggf. empfehlen diese Regel zu ändern. Es nützt nichts Entwickler damit zu beschäftigen Trivialitäten niederzuschreiben, es senkt meiner Erfahrung nach sogar die Qualität der restlichen Dokumentation wenn die Leute mit einer “muss irgendwas über alles schreiben damit der Code Sniffer zufrieden ist” Mentalität an die Sache herangehen, ob bewusst oder unbewusst.
Der einfachste Weg hier die Problematik zu umgehen ist aber den Konstruktor einfach komplett zu löschen. Er erfüllt im Moment keine Funktion ! Er ist sogar mögliche Fehlerquelle da er den “parent” Konstruktor nicht aufruft, etwas das automatisch geschieht wenn diese 5 Codezeilen gelöscht würden. Solche leeren Konstruktoren kommen meistens daher, dass sie in einem Klassentemplate existieren und an den Stellen an denen sie nicht gebraucht werden nicht gelöscht werden.
Also spart Zeit und erhöht die “Information pro Bildschirmseite” wo es sinnvoll ist. Eurer zukünftiges Ich wird es euch danken.