Guia Completo de Templates Dinâmicos com JavaScript Puro
Aprenda Closures e Currying: Técnicas Avançadas em JS
Neste tutorial, vamos explorar dois conceitos fundamentais e avançados de JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente.: closures e currying. Ambos estão diretamente relacionados à forma como o JavaScript
Introdução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente. lida com funções e escopos, trazendo poder e flexibilidade ao desenvolvimento de aplicações web.
1. Visão Geral🔗
As closures são formadas quando uma função interna “lembra” o ambiente em que foi criada (escopo léxico), mesmo após a funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. externa ter sido finalizada. Já o currying concentra-se em transformar funções que recebem vários parâmetros em uma sequência de chamadas de função, cada uma recebendo um único parâmetro. Entender esses conceitos é essencial para criar código mais modular, reutilizável e expressivo em JavaScript
Introdução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente..
2. Entendendo Closures🔗
2.1 O que é uma Closure?
Uma closure ocorre quando uma função interna tem acesso às variáveis da função externa que a contém, mesmo depois que a função externa já foi executada. Em outras palavras, a função interna “fecha” (encapsula) as variáveisPré-processadores (SASS/SCSS): Variáveis, Mixins, NestingAprenda a manter seu CSS de forma otimizada com SASS/SCSS utilizando variáveis, mixins e nesting para um código limpo e produtivo. em seu escopo.
Termo | Significado |
---|---|
Escopo Léxico | As variáveis são resolvidas no escopo em que a função foi declarada, não onde ela é executada. |
Função Interna | Função declarada dentro de outra função. |
Closure | Conjunto de referências às variáveis do escopo externo, retidas pela função interna. |
2.2 Exemplo de Closure
Imagine um cenário em que temos uma funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas.
gerarContador
que cria um contador e retorna uma funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. interna capaz de manipular o valor desse contador:
function gerarContador() {
let contador = 0;
return function() {
contador++;
console.log(`Contador atual: ${contador}`);
};
}
const contador1 = gerarContador();
contador1(); // Contador atual: 1
contador1(); // Contador atual: 2
Embora a funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas.
gerarContador
já tenha sido executada, a função retornada ainda tem acesso à variávelPré-processadores (SASS/SCSS): Variáveis, Mixins, NestingAprenda a manter seu CSS de forma otimizada com SASS/SCSS utilizando variáveis, mixins e nesting para um código limpo e produtivo.
contador
. Isso é possível graças à closure formada. Cada chamada de contador1()
atualiza e exibe o valor de contador
, que persiste de invocação em invocação.
2.3 Por que as Closures são úteis?
- Encapsulamento: Permitem criar variáveis privadas em JavaScript
Introdução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente., tornando o código mais seguro e organizado.
- Modularidade: Tornam mais simples a divisão de funcionalidades em partes menores e reutilizáveis.
- Reutilização de Código: Várias funções podem “lembrar” do mesmo escopo, flexibilizando o reuso de variáveis
Pré-processadores (SASS/SCSS): Variáveis, Mixins, NestingAprenda a manter seu CSS de forma otimizada com SASS/SCSS utilizando variáveis, mixins e nesting para um código limpo e produtivo. e lógica interna.
3. Currying🔗
3.1 Conceito de Currying
O currying é uma técnica de refatoração de funções que transformam funções que recebem vários parâmetrosFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. em uma sequência de chamadas de função, cada qual recebendo apenas um parâmetro. Por exemplo, uma função que recebe três argumentos (a, b, c) seria transformada em três chamadas sucessivas:
No JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente., isso resulta em uma série de funções aninhadas, onde cada função retorna outra função, até que todos os argumentos necessários sejam fornecidos.
3.2 Exemplo Prático de Currying
Abaixo temos uma funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. tradicional de soma de três números e em seguida sua versão curried.
// Função tradicional
function soma(a, b, c) {
return a + b + c;
}
console.log(soma(1, 2, 3)); // 6
// Versão curried
function somaCurried(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
console.log(somaCurried(1)(2)(3)); // 6
Observe que em sua forma curried, a funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. recebe um argumento de cada vez. Isso pode parecer mais complexo à primeira vista, mas traz benefícios interessantes.
3.3 Vantagens do Currying
1. Reutilização e ParâmetrosFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. Parciais: Podemos fixar determinados parâmetros
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. sem precisar declará-los repetidamente.
const somaCom10 = somaCurried(10);
console.log(somaCom10(5)(2)); // 17
console.log(somaCom10(20)(5)); // 35
Aqui, fixamos o primeiro argumento em 10, criando uma funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. especializada para somar 10 a qualquer outro par de valores.
2. Composição de FunçõesFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas.: Facilita criar funções
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. mais genéricas que podem ser encadeadas para formar comportamentos complexos de forma clara e expressiva.
3. Organização: Ajuda a organizar funçõesFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. em blocos lógicos menores, favorecendo a lógica funcional e a previsibilidade.
4. Combinação de Closures e Currying🔗
Closures e currying podem ser usados juntos para criar lógicas poderosas. Por exemplo, podemos “lembrar” de um valor específico e, ao mesmo tempo, produzir uma cadeia de funçõesFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. para transformar esse valor:
function taxasBasicas(imposto) {
return function(custoBase) {
// Armazena imposto por meio de closure
const valorImposto = imposto;
// Retorna função curried para aplicar incrementos
return function(adicional) {
return custoBase + adicional + valorImposto;
};
};
}
const impostoBrasil = taxasBasicas(7.5); // 7.5 é a taxa
const custoVeiculo = impostoBrasil(10000); // custo base de 10000
console.log(custoVeiculo(500)); // 10000 + 500 + 7.5 = 10507.5
- O valor
imposto
fica retido dentro do escopoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. léxico de
taxasBasicas
. - Podemos criar uma função
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. especializada (
custoVeiculo
) que já tenha armazenado o custo base. - Posteriormente, aplicamos um valor adicional e obtemos o resultado final.
5. Resumo e Dicas Práticas🔗
- Closures:
- Mantenha cuidado ao criar funções internas que manipulam variáveis
Pré-processadores (SASS/SCSS): Variáveis, Mixins, NestingAprenda a manter seu CSS de forma otimizada com SASS/SCSS utilizando variáveis, mixins e nesting para um código limpo e produtivo. mutáveis, pois podem gerar comportamentos inesperados e dificultar o debug
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática..
- Use closures para criar variáveis
Pré-processadores (SASS/SCSS): Variáveis, Mixins, NestingAprenda a manter seu CSS de forma otimizada com SASS/SCSS utilizando variáveis, mixins e nesting para um código limpo e produtivo. “privadas” e reduzir a exposição de detalhes da implementação.
- Mantenha cuidado ao criar funções internas que manipulam variáveis
- Currying:
- É especialmente útil em programação funcional, onde a flexibilidade para construir funções
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. reutilizáveis é essencial.
- Não confunda currying com partial application
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática., embora ambos lidem com parâmetros
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. parciais, o currying sempre lida com uma função de único parâmetro
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. por etapa.
- É especialmente útil em programação funcional, onde a flexibilidade para construir funções
Essa compreensão aprofundada de closures e currying permite escrever um JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente. mais expressivo, seguro e manutenível. A prática é fundamental: experimente alterar exemplos, criar suas próprias funções
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. internas, e explore diferentes maneiras de aplicar currying no seu dia a dia de desenvolvimento.
Conclusão🔗
As closures oferecem a habilidade de reter dados em escopos que persistem após a execução de uma funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas., enquanto o currying permite criar funções
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. altamente especializadas e maleáveis. Juntos, esses conceitos ampliam o poder da linguagem e dão ao desenvolvedor ferramentas para construir aplicações mais organizadas, modulares e robustas.
Siga praticando a criação de closures e currying em diferentes contextos para entender o grande potencial desses recursos e integrá-los de forma natural ao seu fluxo de desenvolvimento.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do MDN: developer.mozilla.org/pt-BR/docs/Web/JavaScript
- ECMAScript® Language Specification: tc39.es/ecma262/