Validação e Efeitos Colaterais
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 45 de 56.
Getters e setters podem fazer mais do que apenas ler e escrever propriedades - eles podem validar entradas e disparar efeitos colaterais quando os valores mudam.
Vamos criar uma classe User com validação:
class User {
constructor(name, age) {
this._name = name;
this._age = age;
}
get age() {
return this._age;
}
set age(value) {
// Valida se a idade é um número e está dentro de um intervalo razoável
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
// Efeito colateral: registra quando a idade muda
console.log(`Age updated to ${value}`);
}
}Agora, quando usamos o setter, a validação acontece automaticamente:
const user = new User('Alice', 25);
// Isso funciona
user.age = 30; // Logs: "Age updated to 30"
// Isso lança um erro
user.age = -5; // Erro: Age must be between 0 and 120
// Isso também lança um erro
user.age = "thirty"; // Erro: Age must be a numberValidação = Verificar se um valor é válido antes de armazená-lo
Efeitos Colaterais = Ações adicionais que ocorrem quando uma propriedade é alterada
Desafio
Você recebeu uma classe BankAccount com um setter básico. Sua tarefa é completar o setter balance.
Adicione ao setter:
- Validação: Verifique se
valuenão é um número OU é menor que 0 - se for o caso,console.log("Invalid balance")e usereturnpara sair do setter - Efeito Colateral: Após armazenar um valor válido,
console.log(\`Balance updated to ${value}\`)
Folha de consulta
Getters e setters podem validar entradas e disparar efeitos colaterais quando os valores mudam.
A Validação verifica se um valor é válido antes de armazená-lo:
set age(value) {
if (typeof value !== 'number') {
throw new Error('Age must be a number');
}
if (value < 0 || value > 120) {
throw new Error('Age must be between 0 and 120');
}
this._age = value;
}Efeitos Colaterais são ações adicionais que acontecem quando uma propriedade muda:
set age(value) {
// validação...
this._age = value;
// Efeito colateral: registra quando a idade muda
console.log(`Age updated to ${value}`);
}Exemplo de uso:
const user = new User('Alice', 25);
user.age = 30; // Registra: "Age updated to 30"
user.age = -5; // Erro: Age must be between 0 and 120Experimente você mesmo
import { BankAccount } from './account.js';
// Casos de teste
const account = new BankAccount("Savings");
// Teste 1: Saldo válido
account.balance = 100;
console.log(account.balance);
// Teste 2: Saldo inválido (negativo)
account.balance = -50;
console.log(account.balance);
// Teste 3: Saldo inválido (não é um número)
account.balance = "abc";
console.log(account.balance);
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 Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição9Mé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ão