Aufgaben-Python/courses/javascript/08_fehlerbehandlung_und_debugging/README.md

106 lines
3.3 KiB
Markdown

# 🌐 JS 08: Fehlerbehandlung & Debugging
Willkommen zu **Modul 08** des JavaScript-Kurses! In diesem Modul lernst du defensive Programmiertechniken, strukturierte Ausnahmebehandlung mit `try...catch...finally` und den Aufbau professioneller Fehlerklassen-Hierarchien.
---
## 🎯 Lernziele
Nach diesem Modul kannst du:
1. Das **`try...catch...finally`** Kontrollmuster verstehen und für fehlertolerante Anwendungen einsetzen.
2. Gezielte Fehler mit **`throw new Error(...)`** auslösen.
3. Eigene Fehlerklassen von **`Error`** ableiten (`class ValidierungsFehler extends Error`).
4. Fehlerklassen hierarchisch strukturieren und mit **Zusatzattributen** (wie betroffenes Formularfeld oder Saldo) ausstatten.
5. Im `catch`-Block unterschiedliche Fehlerursachen mittels **`instanceof`** unterscheiden und behandeln.
---
## 💡 Theoretische Grundlagen
### 1. Das `try...catch...finally` Muster
```javascript
try {
// Kritischer Code:
const daten = JSON.parse(roheEingabe);
verarbeite(daten);
} catch (error) {
// Behandlung:
console.error("Fehler abgefangen:", error.message);
} finally {
// Läuft garantiert IMMER:
cleanup();
}
```
### 2. Eigene Fehlerklassen definieren
Standard-Fehler (`new Error(...)`) enthalten oft nicht genügend Kontext für granulare UI-Reaktionen. Durch das Ableiten eigener Klassen schaffen wir Klarheit:
```javascript
// Basis für alle Fehler dieser Domäne:
class AnwendungsFehler extends Error {
constructor(message) {
super(message);
this.name = "AnwendungsFehler";
}
}
// Spezifischer Validierungsfehler mit Feldbezug:
class ValidierungsFehler extends AnwendungsFehler {
constructor(message, feld = null) {
super(message);
this.name = "ValidierungsFehler";
this.feld = feld;
}
}
```
### 3. Fehler differenzieren mit `instanceof`
```javascript
try {
fuehreOperationAus();
} catch (err) {
if (err instanceof ValidierungsFehler) {
console.warn(`Ungültige Eingabe im Feld ${err.feld}: ${err.message}`);
} else if (err instanceof GuthabenFehler) {
console.warn(`Guthaben (${err.saldo} €) reicht nicht für ${err.betrag} € aus.`);
} else {
// Unbekannter Fehler -> Neu werfen
throw err;
}
}
```
---
## 🪂 Didaktische Analogie: Die Notbremse & der Auffang-Fallschirm
- **`throw`**: Das Ziehen der Notbremse im Zug – der normale Ablauf wird sofort unterbrochen.
- **`catch`**: Der Fallschirm, der die Passagiere vor dem Absturz bewahrt und einen sicheren Ausstieg ermöglicht.
- **`finally`**: Der Flughafen-Boden, der am Ende des Flugs immer erreicht wird, egal wie turbulent die Reise war.
---
## 🎯 Aufgabenübersicht in `aufgabe.js`
1. **TODO 1: Error-Klassenhierarchie**:
- `AnwendungsFehler extends Error`
- `ValidierungsFehler extends AnwendungsFehler` (mit `feld`)
- `GuthabenFehler extends AnwendungsFehler` (mit `saldo`, `betrag`)
2. **TODO 2: `sichereDivision(a, b)`**:
- Prüft Zahlen und fängt Division durch 0 mit `AnwendungsFehler` ab.
3. **TODO 3: `parseBenutzerJson(jsonString)`**:
- Fängt JSON-Syntaxfehler ab und validiert das Feld `name`.
4. **TODO 4: `pruefeTransaktion(kontoSaldo, abhebeBetrag)`**:
- Prüft positive Beträge und ausreichendes Guthaben mit `GuthabenFehler`.
---
## 🧪 Tests ausführen
Führe die Testsuite in der Web-IDE oder lokal aus:
```bash
# In der Web-IDE: Klicke auf 'Code ausführen & testen'
```