Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Set e Get

Acho que não ficou muito claro, para mim, a aula sobre Getters e Setters.

2 respostas
solução!

Oi João!

Getters e Setters ajudam no encapsulamento das propriedades de uma classe. Normalmente, podemos acessar as propriedades de uma classe com a seguinte sintaxe:

objeto.atributo

Entretanto, desta forma não é possível controlar o que é atribuído a esta propriedade. Por exemplo, no caso de uma classe chamada "Conta" que possui uma propriedade saldo com o seguinte código:

class Conta {
    this.saldo = 0;
}

Podemos alterar o saldo da maneira que quisermos, inclusive colocar um valor negativo ou até mesmo um valor booleano

var conta = new Conta();
conta.saldo = 10000;
conta.saldo = -1;
conta.saldo = true

Todos os comandos acima são válidos.

Quando é necessário implementar uma regra para mudar ou pegar o valor de uma propriedade, utilizamos os getters e setters que basicamente serão funções que intermediarão o acesso à propriedade.

class Conta() {
    this._saldo = 0; // inicializando uma propriedade privada

    get saldo() {
        return "o saldo é de " + this._saldo + " reais";
    }

    set saldo(valor) {
        if(valor < 0) {
            this._saldo = 0;
        }
        else {
            this._saldo = valor;
    } 
}

Na classe acima foram implementadas regras adicionais ao pegar o valor e atribuir um novo valor à propriedade _saldo, que recebe o "_" na frente para indicar que ela não deve ser acessada diretamente.

Quando executamos os comandos

var conta = new Conta();
conta.saldo = 15;
console.log(conta.saldo);
conta.saldo = -10;
console.log(conta.saldo);

Teremos como resultado

o saldo é de 15 reais
o saldo é de 0 reais

No primeiro setter, atribuimos o valor 15 à propriedade _saldo e foi printada a frase como definida no get saldo(). Note também que o valor 15 foi passado com o sinal de =. Neste momento, a função set do saldo esta sendo chamada com saldo(15), e o valor de _saldo agora é 15.

No segundo caso, o valor atribuído é -10. No setter definimos que para valor < 0, _saldo receberá 0.

Quando executamos o comando conta.saldo estamos invocando o get saldo() que retorna "o saldo é de " + this._saldo + " reais".

Esse assunto realmente é confuso no começo, mas quando começamos a utilizar no dia a dia ele começa a fazer mais sentido.

Espero ter ajudado. Qualquer outra dúvida pode postar aqui. :)

Muito Obrigado!