Menu
CoddyTech

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 las entradas y desencadenar 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) {
    // 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 cambia la edad
    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 cambia una propiedad

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; en ese caso, usa console.log("Invalid balance") y return para salir del setter
  2. Efecto secundario: Después de almacenar un valor válido, console.log(\`Balance updated to $${value}\`)
REQUIRED OUTPUT FORMAT: [Your translated content here]

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

// 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