Menu
Coddy logo textTech

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 number

Validierung = Überprüfen, ob ein Wert gültig ist, bevor er gespeichert wird
Seiteneffekte = Zusätzliche Aktionen, die auftreten, wenn sich eine Eigenschaft ändert

challenge icon

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:

  1. Validierung: Überprüfe, ob value keine Zahl ist ODER kleiner als 0 ist – falls ja, führe console.log("Invalid balance") aus und verwende return, um den Setter zu verlassen
  2. 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 120

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: 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);

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung