Zalety setterów i getterów w OOP w JavaScript

W poprzedniej lekcji zrobiliśmy dla każdej właściwości getter i setter. Może pojawić się pytanie, po co potrzebne są takie skomplikowania, przecież faktycznie tego samego efektu można osiągnąć, jeśli zrobić właściwości publicznymi, a nie prywatnymi.

Chodzi o to, że gettery i settery mają zaletę: przed odwołaniem się do właściwości można wykonać pewne sprawdzenia. Na przykład, w naszym przypadku przy zapisie imienia i nazwiska możemy sprawdzić, że nowa wartość nie jest pustym ciągiem znaków:

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

Sprawdźmy, jak to działa. Na początek stwórzmy obiekt klasy:

javascriptlet user = new User;

Teraz spróbujmy zapisać prawidłową wartość:

javascriptuser.setName('john');

A teraz spróbujmy zapisać nieprawidłową:

javascriptuser.setName(''); // błąd
Задание 1

W klasie Employee w setterze wieku zrób sprawdzenie, że wiek powinien być od 0 do 120.

Задание 2

W klasie Employee w getterze wypłaty zrób tak, aby przy odczycie wypłaty na koniec jej wartości był dodawany znak dolara.