Vantagens de setters e getters em POO em JavaScript

Na lição anterior, criamos um getter e um setter para cada propriedade. Pode surgir a pergunta: por que são necessárias tais complexidades, se praticamente o mesmo efeito pode ser alcançado tornando as propriedades públicas em vez de privadas?

A questão é que os getters e setters têm uma vantagem: antes de acessar uma propriedade, algumas verificações podem ser executadas. Por exemplo, no nosso caso, ao gravar o nome e sobrenome, podemos verificar que o novo valor não é uma string vazia:

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

Vamos verificar como isso funciona. Primeiro, vamos criar um objeto da classe:

javascriptlet user = new User;

Agora vamos tentar gravar um valor correto:

javascriptuser.setName('john');

E agora vamos tentar gravar um valor incorreto:

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

Na classe Employee, no setter da idade, faça uma verificação para garantir que a idade deve estar entre 0 e 120.

Задание 2

Na classe Employee, no getter do salário, faça com que ao ler o salário, um símbolo de dólar seja adicionado ao final de seu valor.