Vantaggi dei setter e getter in OOP in JavaScript

Nella lezione precedente abbiamo creato un getter e un setter per ogni proprietà. Potrebbe sorgere la domanda: a cosa servono tali complicazioni, dato che sostanzialmente lo stesso effetto può essere ottenuto rendendo le proprietà pubbliche, anziché private.

Il punto è che i getter e i setter hanno un vantaggio: prima di accedere alla proprietà è possibile eseguire alcuni controlli. Ad esempio, nel nostro caso, quando impostiamo nome e cognome, possiamo verificare che il nuovo valore non sia una stringa vuota:

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

Verifichiamo come funziona. Per prima cosa creiamo un oggetto della classe:

javascriptlet user = new User;

Ora proviamo a impostare un valore corretto:

javascriptuser.setName('john');

E ora proviamo a impostare un valore non corretto:

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

Nella classe Employee, nel setter dell'età, aggiungete un controllo per verificare che l'età deve essere compresa tra 0 e 120.

Задание 2

Nella classe Employee, nel getter dello stipendio, fate in modo che alla lettura dello stipendio, alla fine del suo valore venga aggiunto il simbolo del dollaro.