Kategorien
Clean Code Learn to Code

Guard Clauses

Code sollte beim Lesen möglichst schnell verstanden werden. Er sollte sprechend sein. Auf der Ebene einer Funktion sind es u.a. Bedingungen, also if-Statements, die den Code schwer verständlich machen können.

Eine Möglichkeit, die Lesbarkeit zu verbessern, sind Guard Clauses. Vorbedingungen oder triviale Fälle sollten gleich am Anfang einer Funktion überprüft werden. Treffen sie zu, soll die Funktion sofort, entweder durch eine Exception oder durch eine Rückgabe, beendet werden.

Hier ein einfaches Beispiel:

// Ohne guard. Ein return-Statement.
function double(value) {
  let result = null;
  if (value != null) {
    result = value * 2;
  }
  return result;
}
// Mit guard. Zwei return-Statements.
function double(value) {
  
  if (value == null) {
    return null;
  }

  return value * 2;
}

Guard Clauses haben mehrere Vorteile:

  • Die eigentliche Berechnung wird schneller erfasst. Sie liegt nicht „versteckt“ innerhalb eines if-Blocks.
  • Die Bedingung, unter denen die Berechnung nicht durchgeführt wird, wird schneller erfasst. Sie ist von der eigentlichen Berechnung getrennt.
  • Und – ganz wichtig – Änderungen an den Eingangsbedingungen oder an der eigentlichen Berechnung sind voneinander getrennt. Möchte man zum Beispiel im null-Case eine Exception werfen, so muss man im Code-Beispiel ohne Guard mitten im Code einen else-Block hinzufügen. Mit Guard muss man nur das return durch das Werfen einer Exception ersetzen. Auch weitere Bedingungen, wie die Prüfung, ob eine Zahl übergeben wurde, lassen sich leicht hinzufügen. Mit Guard-Clauses haben wir die Abhängigkeit zwischen Vorbedingungen und eigentlicher Berechnung verringert.

Guard Clauses wurden 1996 von Kent Beck in seinem Klassiker „Smalltalk Best Practice Patterns“ eingeführt. Er weichte damit ein Postulat der strukturierten Programmierung, nämlich dem, dass jede Funktion genau ein return-Statement haben sollte, auf. Dieses Postulat – eine Reaktion auf die Softwarekrise der 1960ziger Jahre – hat, so Kent Beck, seine Berechtigung für Programmiersprachen wie Fortran, wo eine Funktion auch noch mehrere Einstiegspunkte haben konnte. In so einem Umfeld sind Funktionen mit mehreren Ein- und Ausstiegspunkten nicht mehr nachvollziehbar. Bei aktuellen Programmiersprachen verbessern Guard Clauses hingegen die Lesbarkeit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert