Kapitel 2: Grundlagen / 2.11 Assertions

Eine Assertion, zu deutsch etwas holprig Sicherstellung, vergewissert sich, ob das Programm in einem erwarteten, notwendigen Zustand ist. Ist es das, geschieht nichts. Ist es das nicht, wird es mit einer Runtime Exception abgebrochen.

Anders herum definiert ist eine Assertion also ein bedingter Programmabbruch.

let alter = -3
assert(alter >= 0, "Eine Person kann nicht jünger sein als 0 Jahre.")

In diesem Beispiel wird die Konstante alter zunächst auf -3 gesetzt, um eine Fehlersituation herzustellen. Dann wird über eine Assertion geprüft, ob das Alter größer oder gleich 0 ist. Ist es das nicht, wird das Programm kontrolliert mit einer sprechenden Fehlermeldung abgebochen.

Syntaktisch folgt auf das Schlüsselwort assert eine runde Klammer, innerhalb derer sich zunächst die Erfolgsbedingung befindet, also die negierte Abbruchbedingung. Hierbei handelt es sich um einen logischen Ausdruck, der nach true oder false ausgewertet werden kann. Optional folgt, durch ein Komma getrennt, die Fehlermeldung als String.

Auf die Fehlermeldung kann technisch also auch verzichtet werden:

assert(alter >= 0)

Eine typische Anwendung für eine Assertion ist es, wenn Sie eine Funktion schreiben, die einen Parameter übergeben bekommt und Sie fachliche Bedingungen an den übergebenen Parameter stellen, die Sie durch den Parametertyp allein nicht erzwingen können.

Angenommen Sie möchten die Schubkraft eines Triebwerks berechnen und bekommen als Parameter die Gravitation des Planeten, von dem Sie abheben möchten, als Double übergeben. Die Gravitation kann nicht kleiner als 0 sein, aber Sie können technisch nicht verhindern, einen Wert kleiner 0 übergeben zu bekommen, also verwenden Sie eine Assertion.

Sollten Sie tatsächlich eine Gravitation kleiner 0 übergeben bekommen, liegt außerhalb der von Ihnen geschriebenen Funktion offensichtlich ein Programmierfehler vor und der erzwungene Programmabbruch ist gerechtfertigt. Ist zudem die von Ihnen gewählte Fehlermeldung sprechend, kann sie noch während der Entwicklungszeit dabei helfen, den Fehler zu beheben.

Natürlich gehen sie hierbei das Risiko ein – Sie erinnern sich, wir hatten das Thema schon – sie gehen das Risiko ein, zur Laufzeit beim Benutzer oder beim Kunden einen Programmabbruch zu haben, falls ihre Applikation nicht genügend getestet wurde. Das ist sicher nicht wünschenswert. Die Alternative wäre aber, mit falschen Werten und einem kaputten Zustand das Programm weiterlaufen zu lassen, und das ist noch weit weniger wünschenswert.

Designen Sie Ihr Programm also bitte in erster Linie so, dass möglichst keine fachlich oder technisch unerlaubten Zustände auftreten können. Falls sich das aber an der einen oder anderen Stelle nicht ausschließen lässt, dann gewöhnen Sie sich bitte an, immer Assertions zu verwenden, um den weitern Programmablauf gegen undefinierte Zustände abzusichern.

Beitragsbild: Martinet noir Apus apus Common Swift von Sébastien Bertru in abgewandelter Form (CC BY-SA 2.0)

Kapitel 2.11: Assertions

Schreibe einen Kommentar

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