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 no log 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;  // Loga: "Age updated to 30"

// Isso lança um erro
user.age = -5;  // Erro: Age deve estar entre 0 e 120

// Isso também lança um erro
user.age = "thirty";  // Erro: Age deve ser um número

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

challenge icon

Desafio

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

Adicione ao setter:

  1. Validação: Verifique se value não é um número OU é menor que 0 — se for, use console.log("Invalid balance") e use return para sair do setter
  2. Efeito colateral: Depois de armazenar um valor válido, use console.log(\`Balance updated to $${value}\`)

Experimente você mesmo

import { BankAccount } from './account.js';

// Casos de teste
const account = new BankAccount("Savings");

// Test 1: Valid balance
account.balance = 100;
console.log(account.balance);

// Test 2: Invalid balance (negative)
account.balance = -50;
console.log(account.balance);

// Test 3: Invalid balance (not a number)
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

Pratique por conta própria: Compilador de JavaScript online