Výhody setterov a getterov v OOP v JavaScripte

V predchádzajúcej lekcii sme vytvorili pre každú vlastnosť getter a setter. Môže vzniknúť otázka, na čo sú takéto komplikácie potrebné, veď v podstate rovnakého efektu sa dá dosiahnuť, ak urobíme vlastnosti verejnými, nie súkromnými.

Vec sa má tak, že gettre a setre majú výhodu: pred prístupom k vlastnosti je možné vykonať niektoré kontroly. Napríklad, v našom prípade pri zápise mena a priezviska môžeme skontrolovať, že nová hodnota nie je prázdny reťazec:

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;
  }
}

Poďme otestovať, ako to funguje. Najprv vytvoríme objekt triedy:

javascriptlet user = new User;

Teraz skúsme zapísať korektnú hodnotu:

javascriptuser.setName('john');

A teraz skúsme zapísať nekorektnú:

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

V triede Employee v setteri veku vykonajte kontrolu, že vek musí byť od 0 do 120.

Задание 2

V triede Employee v getteri platu urobte tak, aby pri čítaní platu na koniec jeho hodnoty bol pridaný znak dolára.