Usando getters e setters em JavaScript para controle de propriedades

Entenda como usar getters e setters em JavaScript para manipular propriedades de objetos e garantir acesso controlado às informações.

Como usar getters e setters em JavaScript?

Em JavaScript, getters e setters são métodos especiais que permitem controlar o acesso e a modificação das propriedades de um objeto. Eles são parte do conceito de encapsulamento, um dos pilares da Programação Orientada a Objetos (OOP), que visa ocultar o estado interno de um objeto e expor apenas o necessário para interação com outras partes do código.

O que são getters e setters?

Getters e setters são métodos que facilitam o acesso e a modificação das propriedades de um objeto. Enquanto os getters são usados para acessar o valor de uma propriedade, os setters são usados para modificá-la.

  • Getter: Define como acessar o valor de uma propriedade de forma controlada.
  • Setter: Define como modificar o valor de uma propriedade, muitas vezes aplicando alguma lógica ou validação antes de alterar o valor.

Sintaxe de getters e setters

Em JavaScript, os getters e setters são definidos dentro de uma classe utilizando a palavra-chave get para o getter e set para o setter. Eles permitem que você interaja com propriedades de um objeto de forma similar à forma como acessa ou modifica propriedades diretamente, mas com controle adicional sobre como esses valores são obtidos ou alterados.

Exemplo de como usar getters e setters:

class Pessoa {
  constructor(nome, idade) {
    this._nome = nome;
    this._idade = idade;
  }
  get nome() {
    return this._nome;
  }
  set nome(novoNome) {
    if (novoNome.length > 3) {
      this._nome = novoNome;
    } else {
      console.log('Nome precisa ter mais de 3 caracteres.');
    }
  }
  get idade() {
    return this._idade;
  }
  set idade(novaIdade) {
    if (novaIdade > 0) {
      this._idade = novaIdade;
    } else {
      console.log('Idade deve ser um número positivo.');
    }
  }
}

const pessoa1 = new Pessoa('João', 30);
pessoa1.nome = 'Maria';
pessoa1.idade = 35;
console.log(pessoa1.nome);  // Maria
console.log(pessoa1.idade);  // 35

O que o código está fazendo: A classe Pessoa tem as propriedades _nome e _idade, que são privadas (por convenção, pois em JavaScript não há propriedades privadas por padrão). Os getters e setters permitem acessar e modificar essas propriedades de forma controlada. O setter para o nome valida se o nome tem mais de 3 caracteres antes de alterar o valor, e o setter para idade garante que o valor seja positivo antes de permitir a alteração.

Vantagens do uso de getters e setters

O uso de getters e setters oferece várias vantagens em JavaScript:

  1. Controle sobre os dados: Eles permitem que você aplique validação, lógica de transformação ou até mesmo log de alterações quando as propriedades forem acessadas ou modificadas.
  2. Encapsulamento: Você pode manter o estado interno de um objeto privado e acessar suas propriedades de maneira controlada, evitando que partes do código modifiquem diretamente o estado do objeto.
  3. Facilidade de manutenção: Como os getters e setters podem encapsular a lógica para alterar ou acessar dados, mudanças futuras no comportamento do objeto podem ser feitas em um único lugar, sem a necessidade de alterar o código que usa o objeto.

Getters e Setters com Propriedades Computadas

Você também pode definir getters e setters para propriedades computadas, ou seja, propriedades que não estão diretamente armazenadas no objeto, mas que são derivadas de outras propriedades.

Exemplo de propriedades computadas usando getters e setters:

class Retangulo {
  constructor(largura, altura) {
    this.largura = largura;
    this.altura = altura;
  }
  get area() {
    return this.largura * this.altura;
  }
  set area(valor) {
    console.log('Não é possível definir a área diretamente.');
  }
}

const retangulo = new Retangulo(5, 10);
console.log(retangulo.area);  // 50
retangulo.area = 100;  // Não é possível definir a área diretamente.

O que o código está fazendo: O método area é um getter que calcula e retorna a área do retângulo. O setter area foi definido para impedir que a área seja definida diretamente, e ao tentar atribuir um valor à área, ele exibe uma mensagem de erro.

Considerações sobre o uso de getters e setters

Embora o uso de getters e setters seja uma ótima prática para controlar o acesso a dados e implementar o encapsulamento, é importante não exagerar na complexidade de sua implementação. Certifique-se de usá-los quando houver uma razão clara, como a necessidade de validação ou lógica especial para acessar ou modificar dados. Caso contrário, pode ser mais simples e direto acessar as propriedades diretamente.

Conclusão

Getters e setters são ferramentas poderosas em JavaScript que ajudam a controlar o acesso às propriedades de um objeto de maneira eficaz. Ao usá-los corretamente, você pode melhorar a segurança, modularidade e a manutenção do seu código. Além disso, eles são fundamentais para implementar o encapsulamento e garantir que os dados dos objetos sejam manipulados de maneira controlada e segura.

Os métodos getters e setters são uma parte essencial da Programação Orientada a Objetos (OOP) em JavaScript. Eles permitem que você controle como os dados dentro de um objeto são acessados e modificados, proporcionando um meio para aplicar lógica personalizada, como validações e transformações, enquanto mantém o encapsulamento das propriedades do objeto.

Algumas aplicações:

  • Controle de acesso às propriedades do objeto, com possibilidade de aplicar validação e lógica personalizada.
  • Encapsulamento de dados, mantendo as propriedades privadas e expondo apenas o necessário através dos métodos.
  • Facilidade para modificar a forma como as propriedades de um objeto são acessadas, sem afetar o restante do código.

Dicas para quem está começando

  • Quando for definir propriedades em suas classes, considere se é necessário controlar o acesso usando getters e setters.
  • Evite usar getters e setters quando não houver necessidade de validar ou modificar as propriedades antes de acessá-las ou alterá-las.
  • Pratique criando classes com getters e setters para entender como controlar o acesso e a manipulação de dados.
  • Entenda que getters e setters são especialmente úteis quando você precisa adicionar lógica para garantir que os dados sejam válidos antes de serem modificados.

Contribuições de Cláudia Medeiros

Compartilhe este tutorial: Como usar getters e setters em JavaScript?

Compartilhe este tutorial

Continue aprendendo:

Qual a diferença entre Object.create() e new Class()?

Descubra as principais diferenças entre os métodos Object.create() e new Class(), e como usar cada um para criar objetos e implementar herança.

Tutorial anterior

O que é polimorfismo e como aplicá-lo em JavaScript?

Descubra o que é polimorfismo em JavaScript, como ele é aplicado e como ele permite que objetos diferentes respondam a um mesmo método de maneiras distintas.

Próximo tutorial