As Palavras-chave get e set
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy. Lição 43 de 56.
Getters e setters são métodos especiais que parecem propriedades, mas na verdade são funções. Eles dão a você controle sobre como as propriedades são acessadas e modificadas.
Vamos criar uma classe Person simples:
class Person {
constructor(firstName, lastName) {
this._firstName = firstName;
this._lastName = lastName;
}
// Getter de fullName
get fullName() {
return `${this._firstName} ${this._lastName}`;
}
// Setter de fullName
set fullName(value) {
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
}
}O sublinhado em _firstName e _lastName é uma convenção de nomenclatura: ele informa a outros desenvolvedores que essas propriedades são internas e devem ser lidas e alteradas por meio do getter e do setter, não diretamente. JavaScript não impõe essa convenção.
Agora podemos usar esses getters e setters como propriedades:
// Crie uma nova instância de Person
const person = new Person('John', 'Doe');
// Use o getter
console.log(person.fullName); // Saída: John Doe
// Use o setter
person.fullName = 'Jane Smith';
// O setter atualizou as propriedades internas
console.log(person.fullName); // Saída: Jane SmithObserve que não chamamos esses métodos com parênteses. Eles se comportam como propriedades, mas executam código quando são acessados ou modificados.
Desafio
Você recebeu uma classe User com uma propriedade age. Sua tarefa é adicionar um getter e um setter para age que:
- Getter
get age(): retorna a idade armazenada - Setter
set age(newAge): valida se a idade está entre 0 e 120- Se for válida (0-120): armazene-a em
this._age - Se for inválida: não a altere e registre
"Invalid age!"
- Se for válida (0-120): armazene-a em
Experimente você mesmo
import { User } from './user.js';
// Código de teste - não modifique
const user = new User("Alice", 25);
console.log(user.age); // Deve exibir 25
user.age = 30;
console.log(user.age); // Deve exibir 30
user.age = 150; // Deve mostrar "Invalid age!"
console.log(user.age); // Ainda deve exibir 30 (sem alterações)
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe CircleSobrescrita e Método AreaContador de Formas Estático14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com ComposiçãoValidação do Autor do Livro9Métodos e Propriedades Estáticos
Nível de Classe vs. Nível de InstânciaPropriedades EstáticasMétodos Utilitários EstáticosDesafio de Recapitulação12Getters e Setters
As Palavras-chave get e setPropriedades ComputadasValidação e Efeitos ColateraisDesafio de RevisãoPratique por conta própria: Compilador de JavaScript online