Sobes.tech
Middle

Explique o que é o padrão de módulos em JavaScript e onde é aplicado.

sobes.tech IA

Resposta da IA

O padrão de módulos permite encapsular o código definindo uma interface pública e privada. Isso é alcançado criando um escopo privado usando expressões de função imediatamente invocadas (IIFE) ou a sintaxe de Módulos ES.

Aplicado para:

  • Encapsulamento: Esconde a implementação interna, fornecendo apenas a API pública necessária.
  • Prevenção de poluição do escopo global: Variáveis e funções permanecem locais dentro do módulo.
  • Organização do código: Divide a aplicação em blocos lógicos, facilitando a compreensão e manutenção.
  • Reutilização do código: Módulos podem ser importados e utilizados em diferentes partes da aplicação.

Exemplo usando IIFE:

// Criar um escopo privado
const myModule = (() => {
  // Variável privada
  let privateVariable = 'Sou privado!';

  // Função privada
  const privateMethod = () => {
    console.log(privateVariable);
  };

  // Função pública
  const publicMethod = () => {
    console.log('Esta é uma função pública.');
    privateMethod(); // Acesso à função privada
  };

  // Retornar apenas membros públicos
  return {
    publicMethod: publicMethod
  };
})();

// Uso da interface pública
myModule.publicMethod(); // Mostrará "Esta é uma função pública." e "Sou privado!"
// myModule.privateVariable; // Erro - não acessível
// myModule.privateMethod(); // Erro - não acessível

Exemplo usando Módulos ES:

// module.js
// Variável privada (não exportada)
const privateVariable = 'Sou privado no ES Module!';

// Função privada (não exportada)
const privateMethod = () => {
  console.log(privateVariable);
};

// Função pública (exportada)
export const publicMethod = () => {
  console.log('Esta é uma função pública no ES Module.');
  privateMethod();
};
// main.js
import { publicMethod } from './module.js';

publicMethod(); // Mostrará "Esta é uma função pública no ES Module." e "Sou privado no ES Module!"