Sobes.tech
Middle

Explique qué es el patrón de módulos en JavaScript y dónde se aplica.

sobes.tech AI

Respuesta de la IA

El patrón de módulos permite encapsular el código definiendo una interfaz pública y privada. Esto se logra creando un ámbito privado mediante expresiones de función inmediatamente invocadas (IIFE) o la sintaxis de ES Modules.

Se aplica para:

  • Encapsulación: Oculta la implementación interna, proporcionando solo la API pública necesaria.
  • Prevención de contaminación del ámbito global: Las variables y funciones permanecen locales dentro del módulo.
  • Organización del código: Divide la aplicación en bloques lógicos, facilitando la comprensión y el mantenimiento.
  • Reutilización del código: Los módulos pueden ser importados y utilizados en diferentes partes de la aplicación.

Ejemplo con uso de IIFE:

// Crear un ámbito privado
const myModule = (() => {
  // Variable privada
  let privateVariable = '¡Soy privado!';

  // Función privada
  const privateMethod = () => {
    console.log(privateVariable);
  };

  // Función pública
  const publicMethod = () => {
    console.log('Esta es una función pública.');
    privateMethod(); // Acceso a la función privada
  };

  // Solo devolver los miembros públicos
  return {
    publicMethod: publicMethod
  };
})();

// Uso de la interfaz pública
myModule.publicMethod(); // Mostrará "Esta es una función pública." y "¡Soy privado!"
// myModule.privateVariable; // Error - no accesible
// myModule.privateMethod(); // Error - no accesible

Ejemplo con uso de ES Modules:

// module.js
// Variable privada (no exportada)
const privateVariable = '¡Soy privado en ES Module!';

// Función privada (no exportada)
const privateMethod = () => {
  console.log(privateVariable);
};

// Función pública (exportada)
export const publicMethod = () => {
  console.log('Esta es una función pública en ES Module.');
  privateMethod();
};
// main.js
import { publicMethod } from './module.js';

publicMethod(); // Mostrará "Esta es una función pública en ES Module." y "¡Soy privado en ES Module!"