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.

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) {
    // 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: Age must be between 0 and 120

// Esto también lanza un error
user.age = "thirty";  // Error: Age must be a number

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í, ejecuta console.log("Invalid balance") y usa return para salir del setter
  2. Efecto secundario: Después de almacenar un valor válido, ejecuta console.log(\`Balance updated to ${value}\`)

Hoja de referencia

Los getters y setters pueden validar entradas y activar efectos secundarios cuando los valores cambian.

La Validación comprueba si un valor es válido antes de almacenarlo:

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;
}

Los Efectos Secundarios son acciones adicionales que ocurren cuando una propiedad cambia:

set age(value) {
  // validation...
  this._age = value;
  
  // Side effect: log when age changes
  console.log(`Age updated to ${value}`);
}

Ejemplo de uso:

const user = new User('Alice', 25);
user.age = 30;  // Logs: "Age updated to 30"
user.age = -5;  // Error: Age must be between 0 and 120

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