/** * 🌐 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; }