Ich versuche zu entscheiden, ob ich in meinem Code Ausnahmen, Behauptungen oder Grenzkontrollen verwenden soll.Validieren von Eingabeparametern
Das Programm enthält viele Berechnungen, die von Benutzereingaben abhängig sind. Das Programm läuft auf einem eingebetteten System.
Der folgende Code ist ein typisches Beispiel. Der Parameter weight_percent_salt sollte offensichtlich nicht negativ sein und es sollte nicht mehr als 100.
float Conductivity(const float weight_percent_salt)
{
float sigma_20C = 0.0;
if(weight_percent_salt > 16.2)
{
sigma_20C = 19.4;
}
else
{
sigma_20C = 2.0487 * weight_percent_salt - 0.2352 * pow(weight_percent_salt,2) + 0.0187 * pow(weight_percent_salt,3);
}
return sigma_20C;
}
In diesem speziellen Fall sein ich die Benutzereingabe zwischen 0 einschränken sein - 100% und lassen Sie den Code wie es ist, aber andere Funktionen sind nicht direkt abhängig von Benutzereingaben, sondern das Ergebnis anderer Berechnungen.
Was ist der beste Weg, um fehlerhafte Eingangsparameter in diesen Arten von Funktionen zu behandeln?
Dies sieht aus wie eine nette Art, es zu tun. In meinem Fall wird die Benutzereingabe über eine serielle Schnittstelle mit Modbus RTU erfolgen, daher würde ich einfach einen Fehlercode zurückgeben, anstatt eine Ausnahme auszulösen, wenn die Eingabedaten außerhalb der angegebenen Werte liegen. Danke für deine Antwort! –
@ Q-Bertsuit: Ja, auf jeden Fall Ausnahmen vermeiden, wenn Sie damit durchkommen können. 'std :: optional ', Fehlercodes und ähnliche Lösungen sind meiner Meinung nach robuster, da sie das Typsystem nutzen und den Benutzer zwingen, mit ihnen umzugehen. –
Schön, ich werde std :: optional betrachten, obwohl der Compiler für dieses spezielle Projekt nicht einmal C++ 11 unterstützt. –