Menu
Coddy logo textTech

Validación y efectos secundarios

Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy. Lección 45 de 56.

Los getters y setters pueden hacer más que simplemente leer y escribir propiedades: pueden validar entradas y activar efectos secundarios cuando cambian los valores.

Creemos una clase User con validación:

class User {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }
  
  get age() {
    return this._age;
  }
  
  set age(value) {
    // Valida que la edad sea un número y esté dentro de un rango razonable
    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;
    
    // Efecto secundario: registra cuando cambia la edad
    console.log(`Age updated to ${value}`);
  }
}

Ahora, cuando usamos el setter, la validation ocurre automáticamente:

const user = new User('Alice', 25);

// Esto funciona
user.age = 30;  // Registra: "Age updated to 30"

// Esto lanza un error
user.age = -5;  // Error: La edad debe estar entre 0 y 120

// Esto también lanza un error
user.age = "thirty";  // Error: La edad debe ser un número

Validación = Comprobar si un valor es válido antes de almacenarlo
Efectos secundarios = Acciones adicionales que ocurren cuando cambia una propiedad

challenge icon

Desafío

Se te proporciona una clase BankAccount con un setter básico. Tu tarea es completar el setter de balance.

Añade al setter:

  1. Validación: Comprueba si value no es un número O es menor que 0; si es así, usa console.log("Invalid balance") y return para salir del setter
  2. Efecto secundario: Después de almacenar un valor válido, usa console.log(\`Balance updated to $${value}\`)

Pruébalo tú mismo

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

// Casos de prueba
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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de JavaScript online