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

79 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 🌟 MUSTERLÖSUNG: JS 08 – FEHLERBEHANDLUNG & DEBUGGING 🌟
* =======================================================
*/
class AnwendungsFehler extends Error {
constructor(message) {
super(message);
this.name = "AnwendungsFehler";
}
}
class ValidierungsFehler extends AnwendungsFehler {
constructor(message, feld = null) {
super(message);
this.name = "ValidierungsFehler";
this.feld = feld;
}
}
class GuthabenFehler extends AnwendungsFehler {
constructor(message, saldo = 0, betrag = 0) {
super(message);
this.name = "GuthabenFehler";
this.saldo = saldo;
this.betrag = betrag;
}
}
function sichereDivision(a, b) {
if (typeof a !== "number" || typeof b !== "number" || isNaN(a) || isNaN(b)) {
throw new ValidierungsFehler("Ungültige Zahlenwerte für Division.", "parameter");
}
if (b === 0) {
throw new AnwendungsFehler("Division durch Null ist nicht erlaubt.");
}
return a / b;
}
function parseBenutzerJson(jsonString) {
if (!jsonString || typeof jsonString !== "string") {
throw new ValidierungsFehler("JSON-String darf nicht leer sein.", "jsonString");
}
let parsed;
try {
parsed = JSON.parse(jsonString);
} catch (err) {
throw new ValidierungsFehler("Ungültiges JSON-Format: " + err.message, "jsonString");
}
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
throw new ValidierungsFehler("JSON muss ein Objekt darstellen.", "root");
}
if (!parsed.name || typeof parsed.name !== "string" || parsed.name.trim() === "") {
throw new ValidierungsFehler("Pflichtfeld 'name' fehlt oder ist ungültig.", "name");
}
return parsed;
}
function pruefeTransaktion(kontoSaldo, abhebeBetrag) {
if (
typeof kontoSaldo !== "number" ||
typeof abhebeBetrag !== "number" ||
isNaN(kontoSaldo) ||
isNaN(abhebeBetrag) ||
abhebeBetrag <= 0
) {
throw new ValidierungsFehler("Ungültiger Abhebebetrag.", "abhebeBetrag");
}
if (kontoSaldo < abhebeBetrag) {
throw new GuthabenFehler("Nicht genügend Guthaben vorhanden.", kontoSaldo, abhebeBetrag);
}
return kontoSaldo - abhebeBetrag;
}