Prednosti setera i getera u OOP-u u JavaScript-u

U prethodnoj lekciji smo napravili geter i seter za svako svojstvo. Može se postaviti pitanje, čemu su potrebne takve komplikacije, jer se zapravo istog efekta može postići ako se svojstva naprave javnim, a ne privatnim.

Stvar je u tome što geteri i seteri imaju prednost: pre pristupa svojstvu mogu se izvršiti neke provere. Na primer, u našem slučaju pri upisu imena i prezimena možemo proveriti da li nova vrednost nije prazan 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;
  }
}

Hajde da proverimo kako ovo radi. Za početak kreirajmo objekat klase:

javascriptlet user = new User;

Sada pokušajmo da upišemo korektnu vrednost:

javascriptuser.setName('john');

A sada pokušajmo da upišemo nekorektnu:

javascriptuser.setName(''); // greška
Задание 1

U klasi Employee u seteru godina uradi proveru da godine moraju biti od 0 do 120.

Задание 2

U klasi Employee u geteru plata napravi tako da pri čitanju plate na kraj njene vrednosti bude dodat znak dolara.