Lassen Sie uns einen Schritt zurücktreten und ein anderes Beispiel verwenden, das das arithmetische Mittel eines Array von Werten berechnet.
Wenn das Eingabearray leer (oder null) ist, können Sie die Anforderung des Aufrufers vernünftigerweise erfüllen? Nein. Welche Möglichkeiten haben Sie? Nun, Sie könnten:
- präsentieren / zurückgeben / einen Fehler werfen. Verwenden Sie die Konvention Ihrer Codebasis für diese Fehlerklasse.
- dokumentieren, dass ein Wert wie Null zurückgegeben wird
- dokumentieren, dass ein bestimmter ungültiger Wert zurückgegeben wird (zB NaN)
- dokumentieren, dass ein magischer Wert zurückgegeben wird (z. B. ein min oder max für den Typ oder ein hoffentlich indikativer Wert)
- Deklarieren Sie, dass das Ergebnis nicht angegeben ist
- erklären, dass die Aktion undefiniert ist
- usw.
Ich sage, gib ihnen den Fehler, wenn sie dir eine ungültige Eingabe gegeben haben und die Anfrage nicht abgeschlossen werden kann. Ich meine einen schweren Fehler vom ersten Tag an, damit sie die Anforderungen Ihres Programms verstehen. Schließlich ist Ihre Funktion nicht in der Lage zu reagieren. Wenn die Operation fehlschlagen könnte (z. B. Kopieren einer Datei), sollte Ihre API einen Fehler melden, mit dem sie umgehen kann.
Auf diese Weise können Sie festlegen, wie Ihre Bibliothek fehlerhafte und möglicherweise fehlgeschlagene Anforderungen behandelt.
Es ist sehr wichtig, dass Ihr Code konsistent mit diesen Fehlerklassen umgeht.
In der nächsten Kategorie legen Sie fest, wie Ihre Bibliothek mit Unsinnanforderungen umgeht. Kommen wir zurück auf ein Beispiel ähnlich wie bei Ihnen - wir verwenden , um eine Funktion , die bestimmt , ob eine Datei auf einem Pfad vorhanden ist : bool FileExistsAtPath(String)
. Wie gehen Sie mit diesem Szenario um, wenn der Client eine leere Zeichenfolge übergibt? Wie wäre es mit einem leeren oder einem Null-Array, an das übergeben wird void SaveDocuments(Array<Document>)
? Entscheiden Sie sich für Ihre Bibliothek / Codebasis und seien Sie konsistent. Ich betrachte diese Fälle zufällig als Fehler und verbiete Kunden, unsinnige Anfragen zu stellen, indem ich sie (über eine Behauptung) als Fehler markiere. Einige Leute werden sich dieser Idee / Aktion stark widersetzen. Ich finde diese Fehlererkennung sehr hilfreich. Es ist sehr gut, um Probleme in Programmen zu lokalisieren - mit einer guten Lokalisierung des betreffenden Programms. Programme sind viel klarer und korrekter (unter Berücksichtigung der Weiterentwicklung Ihrer Codebasis) und brennen keine Zyklen innerhalb von Funktionen, die nichts bewirken. Auf diese Weise wird der Code kleiner / sauberer, und die Überprüfungen werden im Allgemeinen an die Stellen verschoben, an denen das Problem möglicherweise auftritt.