Menu
Coddy logo textTech

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 number

Validação = Verificar se um valor é válido antes de armazená-lo
Efeitos Colaterais = Ações adicionais que ocorrem quando uma propriedade é alterada

challenge icon

Desafio

Você recebeu uma classe BankAccount com um setter básico. Sua tarefa é completar o setter balance.

Adicione ao setter:

  1. Validação: Verifique se value não é um número OU é menor que 0 - se for o caso, console.log("Invalid balance") e use return para sair do setter
  2. 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 120

Experimente 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);

quiz iconTeste seus conhecimentos

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