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 numberValidación = Comprobar si un valor es válido antes de almacenarlo
Efectos secundarios = Acciones adicionales que ocurren cuando una propiedad cambia
Desafío
Se te proporciona una clase BankAccount con un setter básico. Tu tarea es completar el setter balance.
Añade al setter:
- Validación: Comprueba si
valueno es un número O es menor que 0; si es así, ejecutaconsole.log("Invalid balance")y usareturnpara salir del setter - 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 120Prué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);
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
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase Círculo14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con Composición9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repaso12Getters y Setters
Las palabras clave get y setPropiedades computadasValidación y efectos secundariosDesafío de repaso