blog / saubere-funktionen-best-practices

Saubere Funktionen: Warum 'Do One Thing' dein Leben rettet

Jeder von uns hat schon einmal vor einer Funktion gesessen, die 500 Zeilen lang war, 12 Parameter entgegennahm und scheinbar alles von der Datenbank-Abfrage bis hin zum Versenden von E-Mails erledigte. Solcher Code ist der Albtraum jedes Entwicklers. Aber wie schreibt man stattdessen “saubere” Funktionen?

In diesem Beitrag schauen wir uns die wichtigsten Prinzipien an, um Funktionen zu schreiben, die nicht nur funktionieren, sondern die man auch gerne liest.

Das ‘Single Responsibility Principle’ (SRP) für Funktionen

Robert C. Martin (“Uncle Bob”) prägte in seinem Buch Clean Code den Satz:

“Functions should do one thing. They should do it well. They should do it only.”

Wenn eine Funktion eine Aufgabe erledigt, ist sie leicht zu benennen, leicht zu testen und vor allem leicht zu verstehen. Wenn du merkst, dass du das Wort “und” im Namen deiner Funktion brauchst (z. B. validateUserAndSaveToDatabase), ist das ein klares Zeichen, dass die Funktion zu viel tut.

Besser: Teile sie in validateUser(user) und saveUser(user) auf.

Die Magie der kleinen Funktionen

Wie klein sollte eine Funktion sein? Die Antwort ist oft: Kleiner als du denkst. Eine Funktion sollte selten mehr als 20 Zeilen Code haben. Warum? Weil unser Gehirn nur eine begrenzte Menge an Komplexität gleichzeitig verarbeiten kann. Eine kleine Funktion passt komplett in den “Arbeitsspeicher” deines Kopfes.

Parameter-Diät: Weniger ist mehr

Je mehr Parameter eine Funktion hat, desto schwieriger wird es, sie zu verstehen und zu testen.

  • 0-1 Parameter: Ideal.
  • 2 Parameter: Okay, wenn es Sinn ergibt (z. B. x und y Koordinaten).
  • 3 Parameter: Sollte man vermeiden, wenn möglich.
  • Mehr als 3: Nutze ein Objekt als Parameter.

Schlecht:

function createMenu(title, body, buttonText, cancellable) { ... }

Gut:

function createMenu({ title, body, buttonText, cancellable }) { ... }

Der Vorteil des Objekts: Die Reihenfolge der Argumente ist egal und der Aufrufende sieht anhand der Keys sofort, was welcher Wert bedeutet.

Sprechende Namen (Verben!)

Funktionen führen Aktionen aus. Deshalb sollten ihre Namen Verben sein.

  • getUser statt user
  • isValid statt validation
  • calculateTotal statt totalAmount

Ein guter Funktionsname sollte so präzise sein, dass man den Körper der Funktion gar nicht lesen muss, um zu wissen, was passiert.

Seiteneffekte vermeiden (Pure Functions)

Eine “reine” Funktion (Pure Function) ist eine Funktion, die:

  1. Bei gleichen Eingaben immer das gleiche Ergebnis liefert.
  2. Keine Seiteneffekte hat (z. B. keine globalen Variablen ändert, nichts in die Konsole schreibt, keine API-Calls macht).

Pure Functions sind der Goldstandard, weil sie extrem einfach zu testen sind. Natürlich braucht jede App Seiteneffekte (sonst würde sie nichts tun), aber versuche, so viel Logik wie möglich in pure Funktionen auszulagern.

Fazit

Saubere Funktionen zu schreiben erfordert Disziplin und Übung. Es fühlt sich am Anfang oft so an, als würde man den Code unnötig “zerstückeln”. Doch der Lohn ist ein System, das stabil bleibt, wenn es wächst, und in dem sich neue Teammitglieder (oder dein zukünftiges Ich in 6 Monaten) sofort zurechtfinden.

Wenn du die Grundlagen der Funktions-Syntax in JavaScript noch einmal auffrischen möchtest, schau dir mein Tutorial dazu an: JavaScript Funktionen Grundlagen.


Ressourcen: