Výhody setterů a getterů v OOP v JavaScriptu

V předchozí lekci jsme vytvořili pro každou vlastnost getter a setter. Může vyvstat otázka, k čemu jsou potřebné takové složitosti, když stejného efektu lze dosáhnout, pokud uděláme vlastnosti veřejné, nikoli privátní.

Jde o to, že gettery a settery mají výhodu: před přístupem k vlastnosti lze provést některé kontroly. Například v našem případě při zápisu jména a příjmení můžeme zkontrolovat, že nová hodnota není prázdný řetězec:

javascriptclass User {
  #name;
  #surn;
  
  setName(name) {
    if (name.length > 0) {
      this.#name = name;
    } else {
      throw new Error('name is incorrect');
    }
  }
  setSurn(surn) {
    if (surn.length > 0) {
      this.#surn = surn;
    } else {
      throw new Error('surn is incorrect');
    }
  }
  
  getName() {
    return this.#name;
  }
  getSurn() {
    return this.#surn;
  }
}

Pojďme vyzkoušet, jak to funguje. Nejprve vytvoříme objekt třídy:

javascriptlet user = new User;

Nyní zkusíme zapsat správnou hodnotu:

javascriptuser.setName('john');

A nyní zkusíme zapsat nesprávnou:

javascriptuser.setName(''); // chyba
Задание 1

Ve třídě Employee v setteru věku proveďte kontrolu, že věk musí být od 0 do 120.

Задание 2

Ve třídě Employee v getteru platu udělejte to, aby při čtení platu na konec jeho hodnoty byl přidán znak dolaru.