Code Quality – Schreibe keine Einzeiler

Neulich habe ich mich bei Twitter mit einem Entwickler über Code Quality unterhalten. Er veröffentlichte einen Tweet, bei dem er seine Vorliebe für One-Liner entdeckte.

Bildausschnitt eines Twitter Beitrages von Cees-Jan Kiewiet über Vorteile von Code Einzeilern und deren schlechte Code Quality.

Grundsätzlich finde ich es gut, wenn sich ein Programmierer weiter entwickelt und für sich neue Möglichkeiten entdeckt. Method Chaining und die im Tweet darüber hinaus dargestellte Nutzung des Splat Operators sind selbst heute noch nicht weit verbreitet und werden wenig genutzt. Ich freue mich für jeden, der die Vorteile dieser Herangehensweise für sich entdeckt.

Warum sind Einzeiler dennoch nicht immer gut?

Neben vielen anderen Nachteilen von Einzeilern, richtet sich meine Kritik am dargestellten Code einfach an die Lesbarkeit. Die Lesbarkeit von Code ist wichtig. Gerade in Zusammenarbeit mit einem Team oder bei Open Source Software, die von vielen Menschen genutzt wird, ist die Lesbarkeit von Code elementar. Zuallererst sitzen da nämlich Menschen, die diesen Code lesen müssen. Aus diesem Verständnis heraus sind Einzeiler oft kontraproduktiv, da sie oft schwer zu lesen sind.

In der Diskussion auf Twitter wurde das Kriterium der Lesbarkeit in den Kommentaren diskutiert. Natürlich ändert sich der Kontext bzw. die Funktionsweise des Einzeilers nicht, wenn man ihn über mehrere Zeilen und eingerückt schreibt. Aus meiner Sicht vereinfacht sich aber die Lesbarkeit enorm.

$promises = async(
    static fn(Channel $channel): array => [
        ...$recvObservable->channel($channel),
    ]
)($channel);

Plötzlich kann man den Einzeiler auf mehrere Zeilen verteilt mit der richtigen Einrückung sehr einfach lesen. Weder das Projekt an sich noch die daran beteiligten Entwickler werden einen Vorteil erzielen, wenn man den dargestellten Code als Einzeiler schreibt. Das einzige, was man mit komplexen Einzelern erzielt, ist eine schwere Lesbarkeit für das menschliche Auge.

Es gibt aber noch weitaus schwerwiegendere Probleme mit Einzeilern in Eurem Code. Andreas Möller hat einen sehr guten Artikel über die Nachteile von Einzeilern geschrieben.

Gibt es keine Coding Standards für Code Quality?

Coding Standards beschreiben die Art und Weise, wie Code innerhalb eines Projekts aussehen soll. Die PHP Framework Interoperability Group (PHP-FIG) hat Standards definiert, die unter anderem auch Coding Standards beschreiben. Allerdings definieren diese Standards keine einheitliche Vorgabe, wie Code, der Method Chaining, anonyme Funktionen oder Callables benutzt, darzustellen ist. In allen Fällen handelt es sich hierbei um komplexen Code, der so einfach wie möglich darzustellen ist, so dass er für das menschliche Auge dennoch einfach zu lesen bleibt.

Fazit

Mein ganz persönliches Fazit lautet, dass man es seinen Mitmenschen so einfach wie nur eben möglich machen sollte. Auch, wenn man mir vorwerfen kann, dass das Vermeiden von Einzeilern eine Art Überfokussierung und Micro-Optimierung ist. Wieso sollte ich die Menschen, die an einem Projekt mit mir arbeiten, mit komplexen, schwer zu lesenden Einzeilern nerven?

Natürlich ist es geil, wenn ich allen anderen durch das Schreiben von komplexem Code in einem Einzeiler mein überlegenes, in allen Lebenslagen beeindruckendes Know How demonstrieren kann. Aber finden das alle anderen auch so geil? Aus meiner Sicht ist diese Art des sehr feinen Egoismus irgendwie nicht angebracht. Denkt an Eure Kollegen, an diejenigen, die mit Eurem Code arbeiten müssen. Sie werden es Euch danken.

Mal ganz zu schweigen von den vielen negativen Nebeneffekten, die Einzeiler sonst noch so mit sich bringen: Erschwerte Wartung, Probleme bei der Testbarkeit, etc. pp. Sie lösen kein einziges Problem. Vielmehr schaffen sie eher welche.

Wie seht ihr das? Gibt es in Euren Unternehmen oder Projekten genau beschriebene Coding Standards? Schreibt ihr lieber Einzeiler oder achtet ihr darauf, dass Code lesbar bleibt?

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.