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 desencadenar efectos secundarios cuando los valores cambian.

Vamos a crear 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) {
    // Validar 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: registrar cuando la edad cambia
    console.log(`Age updated to ${value}`);
  }
}

Ahora, cuando usamos el setter, la validación 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 una propiedad cambia

challenge icon

Desafío

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

Añade al setter:

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

Pruébalo tú mismo

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

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

// Prueba 1: Saldo válido
account.balance = 100;
console.log(account.balance);

// Prueba 2: Saldo no válido (negativo)
account.balance = -50;
console.log(account.balance);

// Prueba 3: Saldo no válido (no es un número)
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