1
resposta

[Dúvida] Private field

Considerando a nova definição de atributos privados, (imagine como exemplo #saldo. dentro da classe ContaCorrente).

Qual a melhor maneira de acessar o valor , por exemplo chamando um console.log?

Devo criar um método de leitura? (como no Python);; Como seria?

Acredito que implementando um getter. É correto?

1 resposta

Olá Daniel, tudo bem com você?

Você está correto sim, para acessarmos um atributo privado através do console.log, será necessário criarmos os métodos manipuladores, métodos getter e setter.

Semelhante ao Python, o JavaScript também possui os métodos getter e setter, que serão responsáveis por capturar um valor de um atributo privado e atribuir valor a um atributo privado respectivamente. Usaremos as palavras-chave get e set para transformar o método da classe em um método do tipo getter e setter.

Quando trabalhamos com métodos do tipo getter e setter devemos respeitar algumas regras, sendo:

  • O atributo privado deve ser declarado na classe, não sendo necessário realizar sua atribuição. Exemplo:

      class ContaCorrente{
          #saldo;
    
          // Métodos da classe
    
      }
  • O uso dos métodos do tipo getter e setter estão disponíveis apenas em classes que possuem o método constructor

  • Método getter

    • Será usada a palavra-chave get antes do nome do método
    • O nome do método deve ser o nome do atributo privado sem a tralha (#)
    • Não deve receber parâmetro
    • Deve retornar o atributo privado, exemplo: return this.#saldo;
    • A sintaxe de acesso ao método será: nomeDoObjeto.nomeDoMetodoGetter
  • Método setter

    • Será usada a palavra-chave set antes do nome do método
    • O nome do método deve ser o nome do atributo privado sem a tralha (#).
    • Deve receber um único parâmetro
    • O parâmetro deve ser atribuído ao atributo privado.
    • A sintaxe de acesso ao método será: nomeDoObjeto.nomeDoMetodoSetter = valor

Sabendo das principais regras, iremos considerar a classe ContaCorrente que possui o atributo privado #saldo e os métodos getter e setter, assim teríamos os seguintes exemplos.

Exemplo método getter

get saldo(){
    console.log('Acessando o método get');
    return this.#saldo;
}

Exemplo de método setter

set saldo(valor){
    console.log('Acessando o método set');
    this.#saldo = valor;
}

Adicionaremos os métodos a classe ContaCorrente, e realizamos a criação da contaDoDaniel, onde primeiramente acessamos o saldo da conta, logo após atribuímos o valor 100 e por fim, realizamos novo acesso ao saldo. Obtendo o seguinte resultado.

class ContaCorrente{
    #saldo;

    constructor(numero){
        this.numero = numero;
        this.#saldo = 0; 
    }

    get saldo(){
        console.log('Acessando o método get');
        return this.#saldo;
    }

    set saldo(valor){
        console.log('Acessando o método set');
        this.#saldo = valor;
    }

}

const contaDoDaniel = new ContaCorrente(10);

console.log(contaDoDaniel.saldo);
contaDoDaniel.saldo = 100;
console.log(contaDoDaniel.saldo);

Resultado

Acessando o método get
0
Acessando o método set
Acessando o método get
100

Note que as mensagens presentes nos métodos getter e setter também foram impressas reforçando que os métodos foram realmente utilizados.

A título de curiosidade, caso queira se aprofundar ainda mais neste assunto, recomendo a leitura do artigo da Alura This, Getters e Setters nas classes Javascript

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Espero ter ajudado, em caso de dúvidas fico à disposição.

Grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!