Konventionen für Source Code

Bekanntlich wird ja Code viel öfter gelesen als geschrieben. Meistens natürlich auch noch von unterschiedlichen Personen. Darum ist es äußerst wichtig, dass der Quelltext leserlich, leicht verständlich und damit auch einfach wartbar ist.

Das setzt natürlich einen exzellenten Schreibstil voraus. Und in einer Gruppe von drei Programmieren wird man vermutlich auch drei verschiedene Meinungen finden, wie den jetzt guter Stil genau aussieht. Hält sich jeder an seinen eigenen guten Stil, wird das Endprodukt, an dem alle gemeinsam arbeiten, vermutlich zum Fleckerlteppich. Das kann schon bei trivialen Dingen wie der Benennung von Variablen zum Problem werden:

Willi verwendet seit Jahren die hungarian notation und seine Variablen haben auch englische Namen.
Deshalb definiert er eine seiner Variablen so:

 //changeFlag
int m_iAlter; 

Für ihn ist ganz klar was gemeint ist: Er sieht sofort den Gültigkeitsbereich und den Typ. Speichern will er in dieser Variable den Status, ob sich die Klasse geändert hat. Ganz klar für ihn, er macht das immer so.

Norman findet Abkürzungen super. Deshalb würde er die selbe Variable so definieren:

 boolean chgd;

Josef hingegen liebt ausgeschriebene Variablen und entwickelt grundsätzlich in Deutsch. Sein Code:

 boolean ObjektIstUnverändert; //Wird falsch wenn jemand das Objekt modifiziert

Jetzt hat man mit einem simplen Beispiel drei komplett unterschiedliche Ausprägungen. Und das bei nur einer einzigen Zeile Code. Ganz klar, dass hier schwer lesbarer und unwartbarer Code entsteht. Um das zu vermeiden, muss man sich auf einen gemeinsamen Stil einigen.

Doch was sollen jetzt diese Code Conventions alles abdecken?

  • Naming:
    Wie benennen wir Variablen/Konstanten/Klassen/Typen/Namespaces …? In welcher Sprache? Was schreiben wir groß, was klein?
    Was machen wir mit Sonderzeichen?
  • Kommentierung:
    Was kommentieren wir, wo und in welcher Detailstufe?
  • Klammernsetzung und Einrückung:
    Wohin setzen wir bei Kontrollstrukturen die Klammern hin? Folgezeile? Wie tief rücken wir wann ein?
  • Verbote ?:
    Gibt es Language Features die wir explizit vermeiden wollen (goto, globale Variablen ..) ?
  • Best Practices:
    Maximale Zeilenanzahl von Funktionen und Klassen, Obergrenze der Anzahl von Übergabeparametern einer Funktion, Hardcodierung von Werten …

Als erstes hilft es sicherlich, sich an Herstellervorgaben zu orientieren, wie bei Java, .net oder python. Ich würde hier nur bei Sonderfällen von diesen Vorgaben abweichen, weil sie defacto Standards sind. Von diesen kann man seine internen Konventionen ableiten und mit Best Practices anreichern.

Wichtig ist aber auch, dass die Konventionen nicht zu umfangreich werden. Ein dickes “Gesetzbuch” wird wohl niemand lesen, kennen und einhalten. Hier helfen kleine Codebrocken viel mehr als Beschreibungen in Prosa. Wirklich gut gelungen finde ich den IDesign C# Coding Standard.

Aber am wichtigsten ist natürlich die Einhaltung solcher Conventions. Sonst macht das keinen Sinn.