Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não entendi a vantagem do uso de métodos privados.

Ficou claro que a cerquilha # torna inacessível por fora da classe o dado. Mas se criarmos uma função por dentro que permite o acesso por fora da classe por meio desta função, isso não é redundante? Não seria mais fácil então permanecer com a convenção do anderline (_) ? Pelo menos se o acesso por fora da classe tornasse claro que o atributo é privado, por exemplo, se as funções de get ou set do dado pudessem ser chamadas por fora da classe com o # como prefixo, para assim ao bater o olho sabermos que se trata de um dado sensível....

Algo que me deixou ainda mais em dúvida foram os getters e os setters, que permitem que por fora o acesso tanto para pegar quanto para editar é identico aos dados que não são privados, parece uma forma mais difícil, que usam mais linhas pra fazer a mesma coisa!

Creio que esta implementação do ESM foi muito bem pensada para atender melhor nós desenvolvedores, então já parto do pressuposto que tem alguma falha no meu raciocínio que explicaria a minha dúvida, posto aqui na esperança que alguém me responda :)

1 resposta
solução!

Oi Helena, tudo bem?

Os métodos privados são úteis quando queremos proteger lógicas internas da classe e informações sensíveis. Ao tornar um método privado, ele só pode ser acessado por dentro da classe, o que garante a segurança dos dados.

Vamos supor que você tenha uma classe chamada "User" e dentro dela você declare um método privado chamado "#montaObjUser()". Esse método tem acesso às propriedades privadas da classe, como "#nome", "#email", "#nascimento", "#role" e "#ativo".

Agora, vamos supor que você tenha um método público chamado "exibirInfos()" que precisa acessar essas informações privadas. Dentro desse método público, você pode chamar o método privado "#montaObjUser()" e obter um objeto com todas as informações do usuário.

Dessa forma, você consegue retornar apenas as informações que devem ser expostas para fora da classe, mantendo as informações sensíveis protegidas.

Quanto aos getters e setters, eles são uma forma de acessar e modificar os atributos privados de uma classe. Eles permitem que você controle o acesso aos atributos e adicione validações ou lógicas extras, se necessário.

Por exemplo, suponha que você tenha um atributo privado chamado "#idade" na classe "User". Você pode criar um getter chamado "getIdade()" e um setter chamado "setIdade(novaIdade)" para acessar e modificar esse atributo. Dessa forma, você pode adicionar validações, como verificar se a idade é um número positivo antes de atribuí-la.

Quanto à sua pergunta sobre o uso do "#" como prefixo para chamar os getters e setters por fora da classe, essa não é uma sintaxe válida em JavaScript. Para acessar os getters e setters, você deve chamá-los diretamente, sem o uso do "#".

Um abraço e bons estudos.