Desarrollo en curso, en breve se publicarán el resto de temas.

Capítulo 11: Manipulación Segura de Datos

Este capítulo aborda patrones para trabajar con datos de forma segura, evitando mutaciones accidentales y errores.

11.1. Inmutabilidad: Por qué es Importante ?

// Problema: mutación accidental
let original = { nombre: "Juan", edad: 30 };
let copia = original;
copia.edad = 31;

console.log(original.edad); // 31 (¡cambió el original!)

// Solución: copias inmutables
let copia2 = { ...original };
copia2.edad = 32;

console.log(original.edad); // 30 (sin cambios)

11.2. Copias Profundas (Deep Copy) vs Superficiales

// Copia superficial (spread, Object.assign)
let obj1 = { usuario: { nombre: "Juan" } };
let obj2 = { ...obj1 };
obj2.usuario.nombre = "María";

console.log(obj1.usuario.nombre); // "María" (¡mutó!)

// Copia profunda con JSON
let obj3 = JSON.parse(JSON.stringify(obj1));
obj3.usuario.nombre = "Carlos";

console.log(obj1.usuario.nombre); // "María" (sin cambios)

// Copia profunda recursiva
function copiasProfunda(obj) {
    if (obj === null || typeof obj !== "object") return obj;
    if (Array.isArray(obj)) return obj.map(copiasProfunda);
    
    let copia = {};
    for (let clave in obj) {
        copia[clave] = copiasProfunda(obj[clave]);
    }
    return copia;
}

11.3. Evitar Mutaciones Accidentales


11.4. Validación de Estructuras


11.5. Transformaciones sin Mutación


11.6. Optional Chaining (?.)


11.7. Nullish Coalescing (??)


11.8. Casos Prácticos: Datos de APIs


Resumen del Capítulo

La manipulación segura de datos previene bugs y hace el código más predecible.

💡 Conceptos Clave:

  • Inmutabilidad: Evita efectos secundarios

  • Copias profundas: Necesarias para datos anidados

  • Object.freeze(): Congelación de objetos

  • Optional chaining (?.): Acceso seguro

  • Nullish coalescing (??): Valores por defecto seguros

  • Validación: Verificar estructura de datos

  • Transformaciones: Crear nuevos datos sin mutar

🤔 Preguntas de Reflexión:

  1. ¿Cuál es la diferencia entre copias superficiales y profundas?

  2. ¿Cuándo usarías optional chaining?

  3. ¿Cuál es la diferencia entre ?? y ||?

  4. ¿Cómo validarías datos de una API?


Última actualización

¿Te fue útil?