Validierung und Seiteneffekte
Teil des Abschnitts Objektorientierte Programmierung der JavaScript-Journey von Coddy — Lektion 45 von 56.
Getter und Setter können mehr als nur Eigenschaften lesen und schreiben – sie können Eingaben validieren und Seiteneffekte auslösen, wenn sich Werte ändern.
Erstellen wir eine User-Klasse mit Validierung:
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// Überprüfen, ob das Alter eine Zahl ist und in einem angemessenen Bereich liegt
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
// Nebeneffekt: Protokollieren, wenn sich das Alter ändert
console.log(`Age updated to ${value}`);
}
}Wenn wir nun den Setter verwenden, erfolgt die Validierung automatisch:
const user = new User('Alice', 25);
// Das funktioniert
user.age = 30; // Protokolliert: "Age updated to 30"
// Dies löst einen Fehler aus
user.age = -5; // Fehler: Age must be between 0 and 120
// Dies löst ebenfalls einen Fehler aus
user.age = "thirty"; // Fehler: Age must be a numberValidierung = Überprüfen, ob ein Wert gültig ist, bevor er gespeichert wird
Seiteneffekte = Zusätzliche Aktionen, die auftreten, wenn sich eine Eigenschaft ändert
Aufgabe
Dir wird eine BankAccount-Klasse mit einem einfachen Setter gegeben. Deine Aufgabe ist es, den balance-Setter zu vervollständigen.
Füge dem Setter Folgendes hinzu:
- Validierung: Überprüfe, ob
valuekeine Zahl ist ODER kleiner als 0 ist – falls ja, führeconsole.log("Invalid balance")aus und verwendereturn, um den Setter zu verlassen - Nebeneffekt: Nachdem ein gültiger Wert gespeichert wurde, führe
console.log(\`Balance updated to ${value}\`)aus
Spickzettel
Getter und Setter können Eingaben validieren und Seiteneffekte auslösen, wenn sich Werte ändern.
Validierung prüft, ob ein Wert gültig ist, bevor er gespeichert wird:
set age(value) {
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
}Seiteneffekte sind zusätzliche Aktionen, die auftreten, wenn sich eine Eigenschaft ändert:
set age(value) {
// validation...
this._age = value;
// Side effect: log when age changes
console.log(`Age updated to ${value}`);
}Beispiel für die Verwendung:
const user = new User('Alice', 25);
user.age = 30; // Logs: "Age updated to 30"
user.age = -5; // Error: Age must be between 0 and 120Probier es selbst
import { BankAccount } from './account.js';
// Testfälle
const account = new BankAccount("Savings");
// Test 1: Gültiger Kontostand
account.balance = 100;
console.log(account.balance);
// Test 2: Ungültiger Kontostand (negativ)
account.balance = -50;
console.log(account.balance);
// Test 3: Ungültiger Kontostand (keine Zahl)
account.balance = "abc";
console.log(account.balance);
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Objekte & das this-Schlüsselwort
Kurze Wiederholung: ObjekteMethoden zu Objekten hinzufügenDas this-Schlüsselwort verstehenKonstruktorfunktionenDas new-SchlüsselwortWiederholungs-Challenge7Vererbung & das extends-Schlüsselwort
VererbungDie „ist-ein“-BeziehungDas extends-SchlüsselwortDie super()-MethodeVererben von Eigenschaften & MethodenWiederholungs-Challenge10Polymorphie
Was ist Polymorphie?Geerbte Methoden überschreibenVerwendung von superWiederholungs-Challenge13Komposition vs. Vererbung
Die "hat-ein"- vs. "ist-ein"-BeziehungDie Grenzen tiefer VererbungObjekte zusammenbauen2Code organisieren
Was sind Module?Exportieren mit exportImportieren mit importDefault- vs. benannte Exports5Kapselung & Zugriff
KapselungÖffentliche & private KlassenfelderPrivate MethodenWiederholungs-Herausforderung8OOP-Code strukturieren
Klassen in Modulen organisieren11Projekt: Ein Shape-Renderer
Setup: Shape-Klasse & ExportCircle-Klasse: Vererbung14Bibliotheksverwaltungssystem
Entwurf der BibliothekBuch-Klasse mit Komposition3Klassen & Objekte
Was ist eine Klasse?Instanzen erstellenEigenschaften und MethodenWiederholungs-Challenge6Projekt: Ein einfaches Bankkonto
Klasse BankAccountEinzahlungen und Auszahlungen9Statische Methoden & Eigenschaften
Klassenebene vs. InstanzebeneStatische EigenschaftenStatische HilfsmethodenWiederholungs-Challenge12Getter & Setter
Die Schlüsselwörter get und setBerechnete EigenschaftenValidierung und SeiteneffekteWiederholungs-Challenge15Abschluss-Herausforderungen
Spielfiguren-BuilderE-Commerce ProduktsystemUniversitäts-VerwaltungssystemSmart-Home-Gerätesystem