Simplifique Assinaturas de Funções com Desestruturação Avançada e Valores Padrão no JavaScript
Ao construir funções que recebem objetos de configuração ou dados de APIs, acessar propriedades manualmente torna o código verboso e suscetível a erros. Utilizar a desestruturação diretamente na assinatura do parâmetro permite extrair apenas as variáveis necessárias, renomeá-las se preciso e aplicar valores padrão — garantindo que a função não falhe caso propriedades ou até mesmo o próprio objeto de entrada sejam omitidos (undefined).
JavaScript
// Função que aceita um objeto de configuração com desestruturação avançada
function criarUsuario({
nome,
funcao = "Desenvolvedor", // Valor padrão para propriedade
status: statusAtivo = true, // Renomeia 'status' para 'statusAtivo' e define valor padrão
redes: { github = "não informado" } = {} // Desestruturação aninhada com objeto padrão
} = {}) { // '= {}' evita erro se o objeto inteiro for omitido na chamada
return `Usuário: ${nome} | Função: ${funcao} | Ativo: ${statusAtivo} | GitHub: ${github}`;
}
// Exemplo 1: Passando objeto completo
const usuario1 = criarUsuario({
nome: "Carlos",
funcao: "Tech Lead",
status: false,
redes: { github: "@carlosdev" }
});
console.log(usuario1);
// Output: Usuário: Carlos | Função: Tech Lead | Ativo: false | GitHub: @carlosdev
// Exemplo 2: Passando dados parciais (assumindo valores padrão)
const usuario2 = criarUsuario({ nome: "Mariana" });
console.log(usuario2);
// Output: Usuário: Mariana | Função: Desenvolvedor | Ativo: true | GitHub: não informado
// Exemplo 3: Chamada sem argumentos (graças ao '= {}' no final da assinatura)
const usuario3 = criarUsuario();
console.log(usuario3);
// Output: Usuário: undefined | Função: Desenvolvedor | Ativo: true | GitHub: não informado
- Fallback no parâmetro principal (
= {}): Definir um objeto vazio como valor padrão para a assinatura inteira previne o estouro de exceçãoTypeError: Cannot destructure property... of 'undefined'caso a função seja chamada sem argumentos. - Renomeação de variáveis (
status: statusAtivo): Permite reatribuir o nome da propriedade recebida para um identificador mais descritivo ou para evitar conflitos de escopo no corpo da função. - Desestruturação aninhada: É possível navegar em estruturas profundas diretamente na entrada (como em
redes: { github }), mas lembre-se de atribuir um fallback (= {}) no nível intermediário para evitar falhas se a chave pai for omitida. - Ordem independente dos argumentos: Diferente dos parâmetros posicionais tradicionais, funções desestruturadas aceitam os dados em qualquer ordem no objeto passado, tornando a chamada muito mais legível.
