Mittwoch, 25. Dezember 2013

Coding Style Guide für C#

Fasst für jede Programmiersprache gibt es einen Style Guide. Z.B. einen für Java, mehrere für C++, einen für VisualBasic und auch einen für C#, der aber ständig und immer wieder missachtet wird.
Dies liegt vor allem daran, dass es so viele Umsteiger gibt.
Diejenigen die von Java kommen, versuchen den Style von Java irgendwie in C# durchzusetzen. Gleiches gilt für C++ und VB.

Deshalb habe ich mir gedacht, dass ich mal ein paar Artikel zu diesem Thema schreiben könnte.

Der Standard


Der C# Style Guide ist eigentlich ganz einfach, da er von Visual Studio per Default eingestellt ist. Er wird meist nur nicht verwendet oder verfälscht, da sich die meisten Umsteiger damit nicht anfreunden wollen. Es ist natürlich einfacher in der Style-Welt weiter zu leben aus der man kam. Da ist das Auge dran gewöhnt und muss sich nicht umstellen.

Per Definition wird in C# der Allman Style (Wikipedia) für die Form verwendet.
Der Guide für die Verwendung und Anordnung der sprachspezifischen Details definiert Microsoft hier. Einen .NET 1.1 Style findet man hier.
Dort sind so Dinge definiert wie die Benamung von Feldern (camel case) oder Eigenschaften (pascal case).

Warum akzeptiert kaum einer den Standard?


Der Umsteiger

Bevor wir uns den Grund für die Verweigerung des Styles anschauen muss vorher noch geklärt werden warum man sich überhaupt einen Style angewöhnt?
Der einfache Grund ist, Performance beim Code lesen und verstehen. Damit man beim Code lesen sich nicht immer umgewöhnen muss und somit seine eigenen Nerven schont, sollte die Form und Struktur sich nach einer klaren Regel definieren. Dies sollte jeder Softwareentwickler kennen.

Bei C# ist es allerdings meist so, dass die Umsteiger sich nicht umgewöhnen wollen und auch meist nur rum schimpfen, dass man den C# Code nicht richtig lesen könne. Für die Umsteiger solle der Style doch am besten der aus der anderen Welt bleiben, damit man sich nicht immer umstellen muss, wenn man sich den alten Code anschaut und dann den Neuen.

Anders ist es allerdings, wenn man von VB zu C++ wechselt. Da wird ein anderer Style akzeptiert.

Warum ist das so?
Nun komm ich zur eigentlichen Antwort auf die Frage zur Akzeptanz.
C++ und VB sind C# einfach zu ähnlich. C++ und VB-Entwickler können sich in C# wiederfinden und glauben sie wären immer noch in der alten Welt, bloß mit neueren Features. Somit möchten sie auch ihre alten Gewohnheiten weiter pflegen und verwenden, da sie diese über Jahre als sehr praktikabel empfunden haben. Eine Umstellung auf etwas anderes würde bedeuten man hätte in den Jahren davor nicht effizient gearbeitet. Man würde somit seine Wurzeln verleugnen.

Ich bin mir sicher, dass das der Grund dafür ist, dass man so viele unterschiedliche Coding-Styles sehen kann, wenn man nach Code-Beispielen im Internet sucht.

Der Einsteiger

Ein wichtiger Punkt beim missachten des Code-Styles sind auch die Einsteiger. Diejenigen die gerade beginnen zu programmieren. Für diese Gruppe steht der Code-Style nicht im Vordergrund.
Das Ergebnis ist wichtiger. Es soll also etwas Lauffähiges entstehen.

Hier beginnt meist etwas heranzuwachsen, was viele von uns Entwicklern fürchten, aber auch schätzen. Der "Autodidakt".
Das Problem mit dem Autodidakten ist der, dass er es grundsätzlich immer besser macht als alle anderen. Er braucht keinen Rat, sondern gibt lieber Einen.
Mit seinen "Erkenntnissen" entstehen meist sehr kompakte Codezeilen, für die man ein Buch zur Übersetzung schreiben müsste.
Man erkennt ihn meist daran, das er mind. 6 Anweisungen in einer Zeile unterbringt. Am besten ohne Kommentar. Feldnamen sind aus Platzgründen aufeinander folgende Buchstaben (a,b,c usw.).

Aber warum ist das so?

Für Autodidakten ist Code-Style nur dann gut, wenn er optimal ist. Optimal ist der Code, der mit möglichst wenigen Buchstaben so viel wie möglich machen kann. Dies ist meistens nicht mehr verständlich, aber eben "optimal".

Dies zeigt sich dann auch darin, dass Leerzeilen vermieden werden müssen. Der Blocksatz ist Favorit. Da werden dann Anweisungen auch gern mal mit Semikolon getrennt hintereinander geschrieben, um dem Blocksatz genüge zu tun.

Code muss bei Autodidakten aber auch so formatiert werden, dass, bei aufeinanderfolgenden Zuweisungen, das Gleichheitszeichen übereinander steht.

Beispiel:
zwerg1 = zwerg5; 
a1     = 6; 
b      = t5; 
a      = z5; 
Dies macht zwar wenig Sinn, sieht aber aus Sicht des Autodidakten "schön" aus. Mal abgesehen von der Zeit, die dafür drauf geht, solche Spielereien in das Codeformat einzubauen und zu pflegen.

Fazit

Umsteiger und Einsteiger machen es dem Code Style schwer sich durchzusetzen.

Die häufigsten Ausreißer möchte ich in den folgenden Blogbeiträgen mal näher beleuchten. Vielleicht erkennt sich ja der ein oder andere wieder. Wobei ich natürlich hier niemanden Anprangern möchte. Jeder kann zum programmieren die Form wählen, die ihm am besten gefällt.

Aber vielleicht kann auch der ein oder andere überlegen, ob es nicht auch in C# sinnvoll wäre sich an einen Globalen-Standard zu halten, auch wenn dies bedeuten würde, dass man sich anpassen müsste.