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 Nebenwirkungen auslösen, wenn sich Werte ändern.
Lass uns eine User-Klasse mit Validierung erstellen:
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// Prü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 jetzt den Setter verwenden, erfolgt die Validierung automatisch:
const user = new User('Alice', 25);
// Das funktioniert
user.age = 30; // Protokolliert: "Age updated to 30"
// Das löst einen Fehler aus
user.age = -5; // Fehler: Age muss zwischen 0 und 120 liegen
// Das löst ebenfalls einen Fehler aus
user.age = "thirty"; // Fehler: Age muss eine Zahl seinValidierung = Überprüfen, ob ein Wert gültig ist, bevor er gespeichert wird
Nebeneffekte = Zusätzliche Aktionen, die ausgeführt werden, wenn sich eine Eigenschaft ändert
Aufgabe
Du erhältst eine Klasse BankAccount mit einem einfachen Setter. Deine Aufgabe ist es, den Setter balance zu vervollständigen.
Füge dem Setter Folgendes hinzu:
- Validierung: Prüfe, ob
valuekeine Zahl oder kleiner als 0 ist – wenn ja,console.log("Invalid balance")und verwendereturn, um den Setter zu verlassen - Nebeneffekt: Gib nach dem Speichern eines gültigen Werts
console.log(\`Balance updated to $${value}\`)aus
Probier 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: Invalid balance (negativ)
account.balance = -50;
console.log(account.balance);
// Test 3: Invalid balance (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: VererbungOverriding & Area-MethodeStatischer Shape-Zähler14Bibliotheksverwaltungssystem
Entwurf der BibliothekBuch-Klasse mit KompositionValidierung der Buchautoren3Klassen & Objekte
Was ist eine Klasse?Instanzen erstellenEigenschaften und MethodenWiederholungs-Challenge6Projekt: Ein einfaches Bankkonto
Klasse BankAccountEinzahlungen und AuszahlungenKontostand als privates Feld9Statische 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Übe selbstständig: Online-JavaScript-Compiler