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

Possibilidade de alterar a data de Negociacao.

Brincando com a classe, percebi que mesmo no exemplo final e instanciando nova data, podemos alterar data por meio do seu atributo "privado"

negociacao._data.setTime(11);

A solução nesse caso poderia fazer um freeze do atributo data?

7 respostas

Você deixou de seguir a convenção fazendo isso ;)

Bem, não vai funcionar o freeze porque ele não permite alterar a referência, e o que você está fazendo é alterar o estado da referência através de método.

Só com TypeScript você consegue verdadeiro encapsulamento porque ele aceita o modificador private.

Oi Ricardo, consegui esclarecer sua dúvida? Qualquer coisa grita aqui que eu escuto :)

Olá Flávio. Respondeu sim. Convenções servem para isso :D

Eu comentei porque teve um certo esforço para isolar a classe. Mas entendi que o esforço foi pra que a propriedade negociacao.data não fosse mudada e não o negociacao._data.

Certo?

Valew!

solução!

É isso mesmo. No caso de _data, ela esta congelada, não podemos alterar seu valor assim:

negociacao._data = new Date() // não funciona, porque tá freeze

Mas se chamamos um método de _data para alterar seu estado interno, o valor da data que o objeto guarda, esse valor não é freeze.

Ou seja, Object.freeze não faz deep freeze, ou seja, ele não congela um objeto e todas as suas propriedades internas.

Já com TypeScript, podemos declarar um atributo como private, algo parecido com Java, parecido não, igual a Java. Ninguém de fora pode acessar a propriedade.

A convenção do _ é muito usada em JS e em outras linguagem que possuem essa brecha.

Dúvida 100% resolvida? Não deixe de me dar um retorno!

Se ainda tiver dúvida grite!

Oi Ricardo, estou monitorando aqui. Tudo certo agora?

Oi Flávio, tudo certo. Dúvida 100% resolvida.

[]'s Ricardo