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
Domínio Avançado de JavaScript

bookGerenciamento 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
copy

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
copy

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
copy

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?

Select the correct answer

question mark

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

Select the correct answer

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

Awesome!

Completion rate improved to 2.22

bookGerenciamento 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
copy

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
copy

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
copy

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?

Select the correct answer

question mark

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

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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