Setterite ja getterite eelised OOP-s JavaScriptis

Eelmises tunnis tegime iga atribuudi jaoks getteri ja setteri. Võib tekkida küsimus, miks sellised keerukused on vajalikud, kuna tegelikult sama efekti saavutame, kui teeme atribuudid avalikeks, mitte privaatseteks.

Asi on selles, et getteritel ja setteritel on eelis: enne atribuudi poole pöördumist saab teha mõningaid kontrollimisi. Näiteks meie puhul saame nime ja perekonnanime kirjutamisel kontrollida, et uus väärtus ei oleks tühi string:

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

Kontrollime, kuidas see töötab. Kõigepealt loome klassi objekti:

javascriptlet user = new User;

Nüüd proovime kirjutada korrektset väärtust:

javascriptuser.setName('john');

Nüüd proovime kirjutada ebakorrektset:

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

Klassis Employee tehke vanuse setteris kontroll, et vanus peaks olema 0 kuni 120 vahel.

Задание 2

Klassis Employee tehke palga getteris nii, et palga lugemisel lisataks selle väärtuse lõppu dollari märk.