85 lines
3.3 KiB
JavaScript
85 lines
3.3 KiB
JavaScript
/**
|
|
* 🌐 JS 08: FEHLERBEHANDLUNG & DEBUGGING 🌐
|
|
* ============================================
|
|
* Defensive Programmierung mit try/catch/finally,
|
|
* benutzerdefinierten Error-Hierarchien und instanceof.
|
|
*/
|
|
|
|
// 🎯 TEILZIEL 1 (TODO 1): Eigene Fehlerklassen ableiten
|
|
// Erstelle eine modulare Fehler-Hierarchie:
|
|
//
|
|
// 1. AnwendungsFehler extends Error:
|
|
// - constructor(message)
|
|
// - Setzt super(message) und this.name = "AnwendungsFehler"
|
|
//
|
|
// 2. ValidierungsFehler extends AnwendungsFehler:
|
|
// - constructor(message, feld = null)
|
|
// - Setzt super(message), this.name = "ValidierungsFehler" und this.feld = feld
|
|
//
|
|
// 3. GuthabenFehler extends AnwendungsFehler:
|
|
// - constructor(message, saldo = 0, betrag = 0)
|
|
// - Setzt super(message), this.name = "GuthabenFehler", this.saldo = saldo und this.betrag = betrag
|
|
|
|
class AnwendungsFehler extends Error {
|
|
constructor(message) {
|
|
// TODO: super(message) aufrufen und this.name setzen
|
|
super(message);
|
|
this.name = "AnwendungsFehler";
|
|
}
|
|
}
|
|
|
|
class ValidierungsFehler extends AnwendungsFehler {
|
|
constructor(message, feld = null) {
|
|
// TODO: super(message) aufrufen, this.name und this.feld setzen
|
|
super(message);
|
|
this.name = "ValidierungsFehler";
|
|
this.feld = feld;
|
|
}
|
|
}
|
|
|
|
class GuthabenFehler extends AnwendungsFehler {
|
|
constructor(message, saldo = 0, betrag = 0) {
|
|
// TODO: super(message) aufrufen, this.name, this.saldo und this.betrag setzen
|
|
super(message);
|
|
this.name = "GuthabenFehler";
|
|
this.saldo = saldo;
|
|
this.betrag = betrag;
|
|
}
|
|
}
|
|
|
|
// 🎯 TEILZIEL 2 (TODO 2): sichereDivision(a, b)
|
|
// Führe eine sichere mathematische Division aus:
|
|
// - Wenn a oder b keine gültige Zahl ist (typeof !== 'number' oder isNaN):
|
|
// -> Wirft ValidierungsFehler("Ungültige Zahlenwerte für Division.", "parameter")
|
|
// - Wenn b === 0:
|
|
// -> Wirft AnwendungsFehler("Division durch Null ist nicht erlaubt.")
|
|
// - Rückgabe: Das Ergebnis von a / b
|
|
function sichereDivision(a, b) {
|
|
// TODO: Validieren, Fehler werfen oder Division berechnen
|
|
return 0;
|
|
}
|
|
|
|
// 🎯 TEILZIEL 3 (TODO 3): parseBenutzerJson(jsonString)
|
|
// Parse einen JSON-String und validiere das Ergebnis mit try...catch:
|
|
// - Fange eventuelle JSON-SyntaxError mit try...catch ab und wirf stattdessen:
|
|
// -> ValidierungsFehler("Ungültiges JSON-Format: ...", "jsonString")
|
|
// - Validiere das geparste Objekt:
|
|
// - Wenn kein Objekt oder wenn die Eigenschaft 'name' (nicht-leerer String) fehlt:
|
|
// -> Wirf ValidierungsFehler("Pflichtfeld 'name' fehlt oder ist ungültig.", "name")
|
|
// - Rückgabe: Das validierte Benutzerobjekt
|
|
function parseBenutzerJson(jsonString) {
|
|
// TODO: JSON.parse in try...catch ausführen und Felder validieren
|
|
return null;
|
|
}
|
|
|
|
// 🎯 TEILZIEL 4 (TODO 4): pruefeTransaktion(kontoSaldo, abhebeBetrag)
|
|
// Prüfe und simuliere eine Kontotransaktion:
|
|
// - Wenn kontoSaldo oder abhebeBetrag keine gültigen Zahlen sind oder abhebeBetrag <= 0:
|
|
// -> Wirft ValidierungsFehler("Ungültiger Abhebebetrag.", "abhebeBetrag")
|
|
// - Wenn kontoSaldo < abhebeBetrag:
|
|
// -> Wirft GuthabenFehler("Nicht genügend Guthaben vorhanden.", kontoSaldo, abhebeBetrag)
|
|
// - Rückgabe: Der verbleibende Saldo (kontoSaldo - abhebeBetrag)
|
|
function pruefeTransaktion(kontoSaldo, abhebeBetrag) {
|
|
// TODO: Betrag & Guthaben prüfen und neuen Saldo zurückgeben
|
|
return 0;
|
|
}
|