Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Gerenciamento de Propriedades com Getters e Setters | Dominando Classes e Herança em JavaScript
Lógica e Interação em JavaScript

Gerenciamento de Propriedades com Getters e Setters

Deslize para mostrar o menu

Getters e setters oferecem uma maneira poderosa de controlar o acesso às propriedades de um objeto em JavaScript.

O que são Getters e Setters?

Em JavaScript, getters e setters são métodos especiais que permitem o acesso controlado às propriedades de um objeto. Eles oferecem flexibilidade para definir como uma propriedade é recuperada e modificada, protegendo o estado interno do objeto.

  • Getter: Método utilizado para recuperar (obter) o valor de uma propriedade;
  • Setter: Método utilizado para definir ou atualizar o valor de uma propriedade.

Pense em um cofre de banco. O cofre guarda itens valiosos (propriedades privadas), e o caixa do banco (getter/setter) atua como o responsável pelo acesso. Não é possível acessar o cofre diretamente, mas o caixa pode recuperar ou atualizar itens para você com base em determinadas regras e validações.

Como Definir e Utilizar Getters e Setters

Getters e setters são definidos utilizando as palavras-chave get e set dentro de uma classe. Ao acessar uma propriedade, o getter é invocado automaticamente. Da mesma forma, ao modificar uma propriedade, o setter é chamado em vez de modificar a propriedade diretamente.

12345678910111213141516171819202122232425262728293031323334
class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type

Neste exemplo, #type é uma propriedade privada, e definimos um getter (get type()) para recuperar seu valor e um setter (set type(newType)) para modificá-lo. O setter inclui validação para evitar a definição de um valor inválido, demonstrando como é possível controlar atualizações em dados privados.

Benefícios de Getters e Setters

Acesso Controlado

  • Getters permitem definir como o valor de uma propriedade é acessado, possibilitando processar ou manipular o valor antes de retorná-lo;
  • Setters oferecem controle sobre como uma propriedade é atualizada, permitindo validar ou transformar os dados antes de atribuí-los a um campo privado.

Proteção de Dados

  • O uso de getters e setters auxilia na proteção do estado interno de um objeto ao fornecer uma interface controlada para interação;
  • Propriedades privadas podem permanecer ocultas, e apenas as informações necessárias podem ser expostas para código externo.

Flexibilidade

Getters e setters permitem adicionar lógica adicional—como validação ou registro de logs—ao acessar ou modificar propriedades sem alterar a forma como o código externo interage com o objeto.

Exemplo: Conta de Usuário com Validação de Senha

Considere o gerenciamento de contas de usuário em que as senhas precisam atender a determinados padrões de segurança. Utilizando um setter, é possível impor a força da senha, enquanto um getter pode recuperar uma versão mascarada da senha para fins de exibição.

12345678910111213141516171819202122232425262728293031323334
class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long

Neste exemplo, o getter retorna uma versão mascarada da senha para ocultar o valor real, e o setter aplica a validação da senha, garantindo que ela tenha pelo menos 8 caracteres.

Exemplo com Lógica de Validação Usando Getters e Setters

Veja outro exemplo onde gerenciamos a idade de uma pessoa e garantimos que o valor permaneça dentro de um intervalo razoável:

12345678910111213141516171819202122232425262728293031323334
class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age

Este exemplo demonstra como um setter pode garantir que uma idade permaneça dentro de um intervalo válido, evitando que dados inválidos sejam armazenados.

1. Qual é o principal objetivo de utilizar getters?

2. No código a seguir, qual será a saída de console.log(user.password);?

question mark

Qual é o principal objetivo de utilizar getters?

Selecione a resposta correta

question mark

No código a seguir, qual será a saída de console.log(user.password);?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 9

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Gerenciamento de Propriedades com Getters e Setters

Getters e setters oferecem uma maneira poderosa de controlar o acesso às propriedades de um objeto em JavaScript.

O que são Getters e Setters?

Em JavaScript, getters e setters são métodos especiais que permitem o acesso controlado às propriedades de um objeto. Eles oferecem flexibilidade para definir como uma propriedade é recuperada e modificada, protegendo o estado interno do objeto.

  • Getter: Método utilizado para recuperar (obter) o valor de uma propriedade;
  • Setter: Método utilizado para definir ou atualizar o valor de uma propriedade.

Pense em um cofre de banco. O cofre guarda itens valiosos (propriedades privadas), e o caixa do banco (getter/setter) atua como o responsável pelo acesso. Não é possível acessar o cofre diretamente, mas o caixa pode recuperar ou atualizar itens para você com base em determinadas regras e validações.

Como Definir e Utilizar Getters e Setters

Getters e setters são definidos utilizando as palavras-chave get e set dentro de uma classe. Ao acessar uma propriedade, o getter é invocado automaticamente. Da mesma forma, ao modificar uma propriedade, o setter é chamado em vez de modificar a propriedade diretamente.

12345678910111213141516171819202122232425262728293031323334
class Animal { #type; // Private field constructor(name, type) { this.name = name; this.#type = type; // Assigning the private field } // Getter for the type property get type() { return this.#type; } // Setter for the type property set type(newType) { if (newType) { this.#type = newType; } else { console.log('Invalid type'); } } } const lion = new Animal('Lion', 'Wild'); // Using getter to access the private type console.log(lion.type); // Output: Wild // Using setter to modify the private type lion.type = 'Domestic'; console.log(lion.type); // Output: Domestic // Trying to set an invalid value lion.type = ''; // Output: Invalid type

Neste exemplo, #type é uma propriedade privada, e definimos um getter (get type()) para recuperar seu valor e um setter (set type(newType)) para modificá-lo. O setter inclui validação para evitar a definição de um valor inválido, demonstrando como é possível controlar atualizações em dados privados.

Benefícios de Getters e Setters

Acesso Controlado

  • Getters permitem definir como o valor de uma propriedade é acessado, possibilitando processar ou manipular o valor antes de retorná-lo;
  • Setters oferecem controle sobre como uma propriedade é atualizada, permitindo validar ou transformar os dados antes de atribuí-los a um campo privado.

Proteção de Dados

  • O uso de getters e setters auxilia na proteção do estado interno de um objeto ao fornecer uma interface controlada para interação;
  • Propriedades privadas podem permanecer ocultas, e apenas as informações necessárias podem ser expostas para código externo.

Flexibilidade

Getters e setters permitem adicionar lógica adicional—como validação ou registro de logs—ao acessar ou modificar propriedades sem alterar a forma como o código externo interage com o objeto.

Exemplo: Conta de Usuário com Validação de Senha

Considere o gerenciamento de contas de usuário em que as senhas precisam atender a determinados padrões de segurança. Utilizando um setter, é possível impor a força da senha, enquanto um getter pode recuperar uma versão mascarada da senha para fins de exibição.

12345678910111213141516171819202122232425262728293031323334
class UserAccount { #password; // Private field constructor(username, password) { this.username = username; this.#password = password; } // Getter for password (returning a masked version) get password() { return '*'.repeat(this.#password.length); // Mask the password when retrieved } // Setter for password with validation set password(newPassword) { if (newPassword.length >= 8) { this.#password = newPassword; } else { console.log('Password must be at least 8 characters long'); } } } const user = new UserAccount('nick_feather', 'secret123'); // Accessing the password using the getter (masked) console.log(user.password); // Output: ********* // Setting a new valid password using the setter user.password = 'strongPassword123'; console.log(user.password); // Output: *************** // Trying to set an invalid password user.password = '123'; // Output: Password must be at least 8 characters long

Neste exemplo, o getter retorna uma versão mascarada da senha para ocultar o valor real, e o setter aplica a validação da senha, garantindo que ela tenha pelo menos 8 caracteres.

Exemplo com Lógica de Validação Usando Getters e Setters

Veja outro exemplo onde gerenciamos a idade de uma pessoa e garantimos que o valor permaneça dentro de um intervalo razoável:

12345678910111213141516171819202122232425262728293031323334
class Person { #age; // Private field constructor(name, age) { this.name = name; this.#age = age; } // Getter for age get age() { return this.#age; } // Setter for age with validation set age(newAge) { if (newAge > 0 && newAge < 120) { this.#age = newAge; } else { console.log('Invalid age'); } } } const peter = new Person('Peter', 30); // Accessing the age using the getter console.log(peter.age); // Output: 30 // Setting a new valid age using the setter peter.age = 35; console.log(peter.age); // Output: 35 // Trying to set an invalid age peter.age = 150; // Output: Invalid age

Este exemplo demonstra como um setter pode garantir que uma idade permaneça dentro de um intervalo válido, evitando que dados inválidos sejam armazenados.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 9
some-alt