Acho que não ficou muito claro, para mim, a aula sobre Getters e Setters.
Acho que não ficou muito claro, para mim, a aula sobre Getters e Setters.
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!