Menu
Coddy logo textTech

Walidacja i efekty uboczne

Część sekcji Programowanie obiektowe ścieżki JavaScript w Coddy. Lekcja 45 z 56.

Gettery i settery mogą robić więcej niż tylko odczytywać i zapisywać właściwości — mogą sprawdzać poprawność danych wejściowych i wywoływać efekty uboczne, gdy wartości się zmieniają.

Stwórzmy klasę User z walidacją:

class User {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }
  get age() {
    return this._age;
  }
  set age(value) {
    // Sprawdź, czy wiek jest liczbą i mieści się w rozsądnym zakresie
    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;
    // Efekt uboczny: zapisanie w dzienniku informacji o zmianie wieku
    console.log(`Age updated to ${value}`);
  }
}

Teraz, gdy używamy settera, walidacja odbywa się automatycznie:

const user = new User('Alice', 25);
// To działa
user.age = 30;  // Zapisuje w dzienniku: "Age updated to 30"
// To powoduje błąd
user.age = -5;  // Błąd: Wiek musi mieścić się w przedziale od 0 do 120
// To również powoduje błąd
user.age = "thirty";  // Błąd: Wiek musi być liczbą

Walidacja = sprawdzanie, czy wartość jest prawidłowa, przed jej zapisaniem
Efekty uboczne = dodatkowe działania wykonywane po zmianie właściwości

challenge icon

Wyzwanie

Otrzymujesz klasę BankAccount z podstawowym setterem. Twoim zadaniem jest uzupełnienie settera balance.

Dodaj do settera:

  1. Walidacja: Sprawdź, czy value nie jest liczbą LUB jest mniejsze niż 0 — jeśli tak, użyj console.log("Invalid balance") i return, aby wyjść z settera
  2. Efekt uboczny: Po zapisaniu prawidłowej wartości użyj console.log(\`Balance updated to $${value}\`)

Spróbuj swoich sił

import { BankAccount } from './account.js';

// Przypadki testowe
const account = new BankAccount("Savings");

// Test 1: Prawidłowe saldo
account.balance = 100;
console.log(account.balance);

// Test 2: Invalid balance (wartość ujemna)
account.balance = -50;
console.log(account.balance);

// Test 3: Invalid balance (wartość nie jest liczbą)
account.balance = "abc";
console.log(account.balance);

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator JavaScript online