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

Classe Mensagem

Há alguma diferença, exceto a verbosidade, entre

class Mensagem {
  constructor(texto = "") {
    this._texto = texto;
  }

  get texto() { return this._texto; }
  set texto(texto) { this._texto = texto; }
}

e

class Mensagem {
  constructor(texto = "") {
    this.texto = texto;
  }
}

?

3 respostas

Oi Felipe, tudo bem? Diferença prática não. Visto que você pode acessar o _texto de em qualquer uma das implementações.

Acontece que no primeiro caso, você está usando recursos de GET e SET da ES6 que permitem a leitura e alteração do atributo. Existe algo semelhante no ruby por exemplo. Onde um reader pode ser criado dessa forma: attr_reader :texto

As diferenças reais estão nas convenções que você deve seguir, principalmente no JavaScript que não tem muitos recursos de visibilidade de atributos (pela própria linguagem). É ai onde mora o perigo.

No mais, recomendo fortemente sempre usar o primeiro exemplo, por que nem sempre você vai precisar dos dois métodos.

solução!

O primeiro permite executar um código antes da leitura ou escrita da propriedade. Por exemplo, você pode garantir que o texto será sempre atribuído em caixa alta. O segundo exemplo fere a tentativa de encapsulamento. Digo tentativa porque js não possui modificador de acesso private.

Inclusive explico a boa prática da convenção com underline.