Was wäre eine gute Möglichkeit, Fehler in JavaScript zu melden, anstatt sich auf Nullen zu verlassen, undefiniert, wenn Fehler auftreten und eine Funktion nicht fortfahren kann. Ich kann mich drei Ansätze:JavaScript Anti-Silent-Techniken zur Fehleranzeige
- nichts tun
- eine Ausnahme werfen
- assert
Hier ist ein einfaches Beispiel-Szenario - eine Funktion, die ein Benutzerkonto mit dem Betrag übergebenen gutschreibt. Die Funktion credit
ist Teil eines Objekts Account
.
Hier ist die naive Lösung.
Ein Hauptproblem bei diesem Ansatz sind ungültige Daten. Lassen Sie uns das beheben und verwenden Sie einen Rückgabewert, um anzuzeigen, dass der Vorgang fehlgeschlagen ist.
Dies ist eine Verbesserung gegenüber dem vorherigen, Clientcode muss jedoch den Rückgabewert überprüfen, um sicherzustellen, dass der Vorgang erfolgreich war. Dies für praktisch jede Methode im System zu tun, kann mühsam werden.
Ein dritter Ansatz, der dem zweiten ähnlich ist, ist das Auslösen einer Ausnahme. Da wir die Ausnahme selbst auslösen, könnte eine bestimmte Ausnahme eher als eine allgemeine Ausnahme ausgelöst werden.
function credit(amount) {
if(!isInt(amount)) {
throw new InvalidAmountError(amount);
}
this.balance += amount;
}
Ein vierter Ansatz, der dem Auslösen von Ausnahmen ähnelt, besteht darin, Assertions in Ihrem Code zu verwenden. Ein Nachteil im Vergleich zu dem obigen Ansatz besteht darin, dass die Möglichkeit, benutzerdefinierte Ausnahmen auszulösen, verloren geht, da die Assertion generisch ist. Es ist jedoch immer noch möglich, das Objekt zu übergeben, um jeden Assert-Aufruf zu werfen.
function credit(amount) {
assert(!isInt(amount), "Amount to credit is not an integer");
this.balance += amount;
}
Eine globale assert
Funktion ist einfach zu schreiben und macht den Code ein wenig kürzer.
Aus diesen Ansätzen, was wäre ein guter Weg, um mit unerwarteten Werten und unglücklichen Pfaden umzugehen. Gibt es andere Ansätze, die hier nicht erwähnt werden, die nützlich sein könnten?
'alert()' ist anti-silent :) –
Dies ist einer der nervigsten Aspekte von dynamisch typisierten Sprachen. – ChaosPandion
@meder - haha, 'alert' ist das lauteste von allen :) – Anurag