Clean Code geht auf Robert Cecil Martin zurück, der ihn in seinem Buch „Clean Code: Re­fac­to­ring, Patterns, Testen und Techniken für sauberen Code“ als Begriff für sauber ge­schrie­be­nen Code geprägt hat. Die Clean-Code-Prin­zi­pi­en sind al­ler­dings we­sent­lich älter und haben ihren Ursprung ei­gent­lich gar nicht in der Software-Ent­wick­lung. Wir erklären, was sauberen Code ausmacht, worin die Vorteile bestehen und wie Sie selbst sauberen Code schreiben können.

Was ist Clean Code?

Clean Code ist kein strenges Regelwerk, sondern be­zeich­net eine Reihe von Prin­zi­pi­en, um Code zu pro­du­zie­ren, der intuitiv ver­ständ­lich und leicht zu ändern ist. Ver­ständ­lich bedeutet in diesem Fall, dass der Code von jedem ge­schul­ten Ent­wick­ler auf Anhieb erfassbar ist. Folgende Ei­gen­schaf­ten er­leich­tern die einfache Les­bar­keit von Clean Code:

  • Der Aus­füh­rungs­ab­lauf der gesamten Anwendung ist sinnvoll und einfach struk­tu­riert.
  • Der Zu­sam­men­hang ver­schie­de­ner Teile des Codes ist klar er­sicht­lich.
  • Die Aufgabe bzw. Rolle jeder Klasse, Funktion, Methode und Variable ist auf Anhieb ver­ständ­lich.

Leicht zu ändern ist Code dann, wenn er einfach anpassbar und er­wei­ter­bar ist. Dies macht es wiederum leichter, Fehler im Code zu beheben. Clean Code ist daher sehr war­tungs­freund­lich. Leicht zu ver­än­dern­der Code hat folgende Merkmale:

  • Klassen und Methoden sind klein und haben möglichst nur eine einzige, ein­deu­ti­ge Aufgabe.
  • Klassen und Methoden sind vor­her­seh­bar, funk­tio­nie­ren er­war­tungs­ge­mäß und sind durch gut do­ku­men­tier­te APIs (Schnitt­stel­len) öf­fent­lich zu­gäng­lich.
  • Der Code verfügt über Unit-Tests.

Die Vorteile einer solchen Pro­gram­mie­rung liegen auf der Hand: Clean Code ist un­ab­hän­gig vom ur­sprüng­li­chen Ent­wick­ler. So kann prin­zi­pi­ell jeder Pro­gram­mie­rer mit dem Code arbeiten. Probleme, die bei­spiels­wei­se bei der Arbeit mit Legacy Code auftreten, werden so vermieden. Auch die Wartung der Software wird so ver­ein­facht, weil Bugs einfacher gefunden und behoben werden können.

Clean-Code-Prin­zi­pi­en im Überblick

Aber wie schreibt man ei­gent­lich sauberen Code? Bei Clean Code geht es darum, bestimmte Leit­ge­dan­ken der Pro­gram­mie­rung zu be­rück­sich­ti­gen. Es geht weniger um konkrete An­wei­sun­gen, was in einer be­stimm­ten Situation wie pro­gram­miert werden soll, als um einen re­flek­tie­ren­den Blick auf die eigene Ar­beits­pra­xis als Ent­wick­ler. Was Clean Code konkret bedeutet, ist daher innerhalb der Ent­wick­ler­ge­mein­de um­strit­ten: Was für die eine Gruppe Pro­gram­mie­rer „clean“ ist, kann von anderen immer noch als „unsauber“ angesehen werden. Wie clean ein Code ist, ist daher immer auch ein Stück weit subjektiv. Wir stellen Ihnen im Folgenden einige bereits eta­blier­te Clean-Code-Prin­zi­pi­en vor, die von den meisten Ent­wick­lern für sinnvoll befunden werden.

Code so einfach wie möglich: KISS

KISS (Keep it simple, stupid) ist eines der ältesten Clean-Code-Prin­zi­pi­en. Es wurde bereits in den 1960er Jahren vom US-ame­ri­ka­ni­schen Militär angewandt. KISS erinnert Pro­gram­mie­rer daran, Code so einfach wie möglich zu kon­stru­ie­ren. Unnötige Kom­ple­xi­tät sollte vermieden werden. In der Pro­gram­mie­rung gibt es nie nur einen Weg zur Lösung eines Problems. Eine Aufgabe kann immer mit ver­schie­de­nen Sprachen aus­ge­drückt und in un­ter­schied­li­chen Befehlen for­mu­liert werden. Pro­gram­mie­rer, die KISS befolgen, müssen sich daher stets fragen, ob sie ein be­stimm­tes Problem nicht auch einfacher lösen können.

Unnötige Wie­der­ho­lun­gen vermeiden: DRY

DRY (Don’t repeat yourself) ist gleichsam eine Kon­kre­ti­sie­rung von KISS. Clean Code nach dem DRY-Prinzip bedeutet, dass eine Funktion eine einzige und damit ein­deu­ti­ge Dar­stel­lung innerhalb des Ge­samt­sys­tems haben sollte.

Hinweis

Der Ge­gen­be­griff zu DRY ist WET (We enjoy typing). Als WET wird Code dann be­zeich­net, wenn unnötige Dopp­lun­gen im Code auf­tau­chen.

Folgendes Beispiel soll das DRY-Clean-Code-Prinzip ver­deut­li­chen: Nut­zer­na­me und Passwort werden im Code zweimal abgerufen, um dann für jeweils un­ter­schied­li­che Aktionen benutzt zu werden. Anstatt beide Prozesse separat zu pro­gram­mie­ren, können diese in einer Funktion gebündelt werden. Aus einem „feuchten“ WET-Code mit Red­un­dan­zen wird so ein „trockener“ DRY-Code.

WET-Code:

//Variante A
let username = getUserName();
let password= getPassword();
let user = { username, password};
client.post(user).then(/*Variante A*/);
//Variante B
let username = getUserName();
let password= getPassword();
let user = { username, password};
client.get(user).then(/*Variante B*/);

DRY Code:

function getUser(){
    return {
        user:getUserName();
        password:getPassword();
    }
}
//Variante A
client.post(getUser()).then(/*Variante A*/ );
//Variante B
client.get(getUser()).then(/*Variante B*/);

Löschen, was nicht gebraucht wird: YAGNI

Hinter dem Clean-Code-Prinzip YAGNI (You aren’t gonna need it) steckt folgende Idee: Ein Ent­wick­ler sollte zu­sätz­li­che Funk­tio­na­li­tä­ten erst dann zum Code hin­zu­fü­gen, wenn sie notwendig werden. YAGNI ist eng verbunden mit den Methoden der agilen Software-Ent­wick­lung. Anstatt in der Ent­wick­lung von einem Ge­samt­kon­zept aus­zu­ge­hen, geht es bei der Pro­gram­mie­rung nach dem YAGNI-Prinzip darum, die Ar­chi­tek­tur der Software in kleinen Schritten auf­zu­bau­en, um so auf Probleme dynamisch und ein­zel­fall­be­zo­gen reagieren zu können. Clean Code ist also immer dann pro­du­ziert, wenn das zu­grun­de­lie­gen­de Problem möglichst effizient gelöst wurde.

Les­bar­keit vor Prägnanz

Code muss funk­tio­nie­ren und von der aus­füh­ren­den Maschine ver­stan­den werden. Aber ins­be­son­de­re dann, wenn Sie mit mehreren Personen an einem Projekt arbeiten, müssen auch andere Ent­wick­ler den Code verstehen können. Deshalb ist Les­bar­keit in der Software-Ent­wick­lung immer wichtiger als ein möglichst prä­gnan­ter Code. Es hat keinen Sinn, prä­gnan­ten Code zu schreiben, wenn andere Ent­wick­ler ihn nicht verstehen. Ein gutes Clean-Code-Beispiel für Les­bar­keit ist die Benennung von Variablen.

Ein Va­ria­blen­na­me sollte immer aus sich heraus ver­ständ­lich sein. Die folgende Variable ist ohne Hin­ter­grund­wis­sen und Erklärung nicht ver­ständ­lich:

int d;

Mit folgender Na­mens­ge­bung ist die gleiche Variable hingegen selbst­er­klä­rend:

int elapsedTimeinDays;
Zum Hauptmenü