, 25 tweets, 6 min read Read on Twitter
Nessa thread, você aprenderá:

✅ O que é Currying
✅ As diferenças entre Currying e Partial Applications
✅ A grande vantagem em utilizar Curried Functions

Vem comigo! 👇
🔥 O que é Currying?

Uma "curried function" é uma função que recebe múltiplos argumentos, 👉um de cada vez👈.
A versão "curried" de uma função com 3 parâmetros, por exemplo, recebe 1 argumento e retorna uma função que recebe o próximo argumento e retorna uma função que recebe o 3º argumento.
A invocação da última função retorna o resultado da aplicação da função à todos os seus argumentos.

Observe o código abaixo, é apenas uma função de soma escrita da forma tradicional:
Abaixo da função `add`, vamos declarar uma função `increment`, que recebe `aNumber` por parâmetro e retorna a invocação de `add` recebendo `1` como o 1º argumento e `aNumber` como o 2º:
Perceba que passamos apenas um argumento na invocação de `add` dentro de `increment`.

Fizemos um "preload" de `add` com o número `1`.

Só que há uma forma mais eficiente de utilizarmos essa técnica.
Podemos refatorar a função `add` de forma que:

🔹 Ao invés de ela receber os 2 números por parâmetro ao mesmo tempo, receber apenas `num1`;
🔹 Fazê-la retornar outra função;
🔹 Fazer com que essa outra função receba apenas `num2` por parâmetro e retorne a soma de `num1` e `num2`.
Perceba que os argumentos são recebidos **um de cada vez**.

Se `add` tivesse mais parâmetros, ela poderia continuar a retornar novas funções até que todos os argumentos fossem passados e a aplicação fosse completada.
Agora, `increment` pode apenas receber a invocação de `add` e se tornar uma referência da closure retornada:
E `increment`, que recebeu `num2 => num1 + num2` pode ser invocada e cumprir o seu papel posteriormente:
Então perceba que, curried functions possibilitam que você:

🔸 Invoque as funções e passe os argumentos de uma só vez, ou;
🔸 Invoque as funções e passe os argumentos aos poucos.
Observe também que curried functions recebem 1 argumento e retornam uma **aplicação parcial** de si mesmas, com um parâmetro fixado ao escopo da closure.
🔥 O que é uma Partial Application?

Uma partial application é uma função que ainda não está utilizando todos os seus argumentos. Uma função que possui alguns argumentos fixados dentro do escopo da closure.
🔥 Qual é a diferença entre Currying e Partial Applications?

🔸 Partial Applications: Recebem quantos argumentos forem necessários.

🔹 Currying Functions: Sempre retornam uma função unária (uma função que recebe apenas 1 argumento).
Ou seja, curried functions sempre retornam partial applications, mas partial applications nem sempre são uma consequência de curried functions.
🔥 A grande vantagem em utilizar Curried Functions

Curying Functions possibilitam que você escreva pequenos módulos de código reutilizáveis e configuráveis, com facilidade.

Imagine que você é dono de uma loja e quer dar 10% de desconto para os seus melhores clientes:
Quando um dos seus melhores clientes compra um valor de R$ 500,00, você dá a ele:
À longo prazo, você calcularia descontos de 10% várias vezes ao dia, e esse tipo de código não é escalável:
Para evitarmos a repetição do `0.10`, podemos refatorar a função `getDiscount` para uma curried function.

Ao fazer isso, temos a flexibilidade de calcular os descontos passando apenas o preço da compra por argumento:
Através da curried function que criamos, você pode variar os descontos por tipo de cliente:
Acha que esse conteúdo pode ajudar + pessoas❓

👉Retweeta👈 essa thread!

Linkei o início dela ali
em baixo, para facilitar =)

Te vejo na próxima 🔥
Se você quer ter a certeza de que receberá meus próximos posts, aperte os 2 botões mágicos abaixo do meu rosto 👇

twitter.com/rogermelodev
3 threads sobre Programação Funcional:

🔗Introdução à Closures


🔗Introdução à Programação Funcional


🔗Explorando map(), filter() e reduce() juntos
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!