Wo kann man Eingabeparameter einer Funktion am besten validieren: im Aufrufer oder in der Funktion selbst?
Da ich meinen Codierungsstil verbessern möchte, versuche ich, die Best Practices oder einige Regeln für dieses Problem zu finden. Wann und was ist besser.
In meinen vorherigen Projekten haben wir jeden Eingabeparameter in der Funktion überprüft und behandelt (z. B. wenn er nicht null ist). Nun habe ich hier in einigen Antworten und auch im Pragmatic Programmer-Buch gelesen, dass die Validierung der Eingabeparameter Aufgabe des Aufrufers ist.
Das bedeutet, dass ich die Eingabeparameter validieren sollte, bevor ich die Funktion aufrufe. Überall wird die Funktion aufgerufen. Und das wirft eine Frage auf: Erzeugt es nicht überall, wo die Funktion aufgerufen wird, eine Verdoppelung der Prüfbedingung?
Ich interessiere mich nicht nur für Nullbedingungen, sondern für die Validierung von Eingabevariablen (negativer Wert für die sqrt
Funktion, Division durch Null, falsche Kombination von Bundesland und Postleitzahl oder irgendetwas anderes)
Gibt es einige Regeln, um zu entscheiden, wo die Eingabebedingung überprüft werden soll?
Ich denke über einige Argumente nach:
- Wenn die Behandlung von ungültigen Variablen variieren kann, ist es gut, sie auf der Anruferseite zu validieren (z. B.
sqrt()
Funktion - in einigen Fällen möchte ich möglicherweise mit komplexen Zahlen arbeiten, also behandle ich die Bedingung im Anrufer). - Wenn die Überprüfungsbedingung bei jedem Aufrufer gleich ist, ist es besser, sie in der Funktion zu überprüfen, um Doppelungen zu vermeiden
- Die Validierung der Eingabeparameter im Aufrufer erfolgt nur einmal vor dem Aufruf vieler Funktionen mit diesem Parameter. Daher ist die Validierung eines Parameters in jeder Funktion nicht wirksam
- Die richtige Lösung hängt vom jeweiligen Fall ab
Ich hoffe, diese Frage ist kein Duplikat einer anderen, ich habe nach diesem Problem gesucht und ähnliche Fragen gefunden, aber sie erwähnen nicht genau diesen Fall.