Problemas de un desarrollador Web

Challenge_Task Fri Oct 27 2023 00:00:00 GMT+0000 (Coordinated Universal Time)

🏆 RETO: El Clásico Hola Mundo

🎯 Desafío #5: Gestión de Memoria y Closures (JS)

JavaScript puede ser peligroso si no entiendes cómo se mantienen vivas las variables en el “Heap”. Vamos a crear un sistema de caché privado.

Misión_Briefing [Avanzado]

"Crea una función que devuelva otra función (Closure). La función interna debe actuar como una caché: si se le pasa un ID que ya ha procesado, debe devolver el valor guardado; si es nuevo, debe calcularlo y guardarlo. La variable de caché NO debe ser accesible desde fuera."

Ver explicación y código 🛠️ (¡No hagas spoiler!)

🏗️ Paso 1: Análisis

El objetivo es el encapsulamiento. Al definir un objeto dentro de una función y devolver otra que hace referencia a él, creamos un ámbito privado que persiste en memoria. ⚙️ Paso 2: Implementación

Utilizaremos un objeto literal o un Map para almacenar los pares clave-valor. La función retornada comprobará la existencia de la clave antes de procesar. 🚀 Paso 3: Optimización

El uso de Map en JavaScript es más eficiente que los objetos literales para cachés frecuentes debido a su rendimiento en inserciones y búsquedas. 💻 Código de la Solución


function crearCachePro() {
  const memoria = new Map(); // Variable privada, inaccesible desde el exterior

  return function(id) {
    if (memoria.has(id)) {
      return `[CACHE] Recuperando: ${memoria.get(id)}`;
    }
    
    // Simulación de cálculo costoso
    const resultado = `Dato_Complejo_${id}_${Math.random().toString(36).substr(2, 5)}`;
    memoria.set(id, resultado);
    return `[PROCESADO] Nuevo valor: ${resultado}`;
  };
}

const consultor = crearCachePro();
console.log(consultor(101)); // Procesa
console.log(consultor(101)); // Recupera de caché inmediatamente