, 23 tweets, 6 min read Read on Twitter
Hoje, continuarei a falar sobre aquele conceito de Programação Funcional que algumas pessoas dizem ser complicado entender, e que eu quero fazer você perceber que não é:

🔥 Closures 🔥

Vem comigo na mini-thread! 👇
Na thread passada explorei passo a passo, com gráficos e exemplos, o Escopo Léxico do JavaScript.

Não há como você entender como closures funcionam sem compreender como o JavaScript lida com escopos.

Se você não viu esse conteúdo, o link está nos últimos tweets =)
Primeiro, vamos relembrar o exemplo final no qual chegamos na 1ª thread sobre closures, onde vimos que:

🔹 Em JavaScript, toda função é uma closure;
🔹 Uma closure é a combinação de uma função e o escopo léxico no qual essa função foi declarada. Ou seja, uma closure carrega consigo qualquer var/let/const que está no mesmo escopo em que ela foi declarada:
Vamos à alguns exemplos mais interessantes =D

No código abaixo, a função `adderFactory` recebe um único parâmetro (num1) e retorna uma nova função.

A função que ela retorna, recebe um único parâmetro (num2) e retorna a soma de `num1` e `num2`:
`adderFactory` é uma factory function. Ela cria funções que podem adicionar valores específicos aos seus parâmetros.

No exemplo acima, essa factory function é utilizada para criar duas novas funções: uma que adiciona 10 ao seu argumento, e outra que adiciona 100.
`add10` e `add100` são closures. Elas compartilham a mesma definição de corpo de função, mas armazenam ambientes léxicos diferentes:

🔸 No ambiente léxico de `add10`, o valor de `num1` é 10;
🔸 No ambiente léxico de `add100`, o valor de `num1` é 100;
Podemos ainda refatorar essa factory function, deixando-a mais concisa. Sem parênteses, chaves, `return` e quebras de linha desnecessárias:
🔥 "Tá, mas pra quê vou usar Closures?"

Muito do código Front-end que você escreve é baseado em eventos.

Você especifica um comportamento e esse comportamento é disparado através de uma ação do usuário.
E geralmente, esse comportamento é setado como um callback. Uma função única que é executada como resposta de um evento.

Vamos codar alguns botões que ajustam o tamanho do texto de uma página.
Uma forma de fazer isso é especificar o tamanho da fonte do elemento `<body>` em pixels e setar o tamanho da fonte dos outros elementos da página com unidades relativas:
Obs.: Sei que não tá bonito, mas meu foco aqui é a funcionalidade da aplicação =)

O objetivo do nosso script é fazer os botões modificarem o font-size do `<body>`.
Consequentemente, isso fará com que o font-size do parágrafo e dos headings sejam modificados também, devido às unidades relativas que eles possuem.

Vamos declarar uma função `makeSizer`, que recebe um parâmetro `size` e retorna uma nova função (uma closure).
Quando essa closure é invocada, ela pega o elemento `<body>` e seta o font-size dele de acordo com o parâmetro `size`:
Agora vamos declarar 3 const que irão receber 3 invocações de `makeSizer`.

Cada invocação recebe como argumento uma string indicando o tamanho do font-size a ser setado:
Ou seja, cada const recebeu a closure que retornamos!
Isso significa que se encadearmos um event listener em um botão, e passarmos por referência uma das closures que essas const estão armazenando como callback do evento, a closure se lembra do valor a ser setado e brilha lindamente fazendo o que deve ser feito:
E claro, podemos refatorar esse código, eliminando repetições e deixando-o mais conciso:
Acha que esse conteúdo pode ajudar + pessoas❓

👉Retweeta👈 essa thread!

Para facilitar, linkei ela ali em baixo =)

Te vejo na próxima 🔥
Threads sobre Programação Funcional que você também pode gostar:

🔗Higher Order Functions:


🔗Introdução à Closures - Parte 1:
🔗Explorando Funções Puras:


🔗Introdução à Programação Funcional:


🔗Introdução à Programação Funcional - Parte 02:
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Roger Melo 💻
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!