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.
Foto de Cláudia Medeiros
Contribuições de
Cláudia Medeiros

Especialista em segurança de software, desempenho de APIs e gestão de infraestrutura em nuvem.

Mais sobre o autor
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