Aufgaben-Python/courses/javascript/08_fehlerbehandlung_und_debugging/aufgabe.js

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;
}