1. Primeiros passos
2. Combine as funções
3. Uso parcial (currying)
4. Programação declarativa
5. Notação quintessencial
6. Imutabilidade e objetos
7. Imutabilidade e matrizes
8. Lentes
9. Conclusão
Este post conclui uma série de artigos sobre programação funcional denominados Ramda Style Thinking.
Nos últimos oito posts, falamos sobre a biblioteca JavaScript Ramda, que fornece funções para trabalhar com JavaScript em um estilo funcional, declarativo e imutável.
Ao longo desta série de artigos, aprendemos que o Ramda tem alguns princípios básicos que sua API segue:
- Os dados vêm por último: quase todas as funções aceitam um parâmetro com os dados como o último argumento.
- Currying: Quase todas as funções no Ramda são curry. Ou seja, você pode chamar uma função com apenas parte dos argumentos necessários e obter uma nova função que aguardará os argumentos restantes. Assim que todos os argumentos forem fornecidos, a função original será chamada.
Esses dois princípios nos permitem escrever um código funcional muito limpo que integra os blocos de construção básicos em operações mais poderosas.
Sumário
Para referência, aqui está um breve resumo de uma série de artigos.
- Os primeiros passos nos são apresentados pela ideia de funções, funções puras e imutabilidade. Ela então nos apresenta as funções de iteração de coleção, como
map
, filter
e reduce
. - A combinação de funções nos mostra como podemos combinar nossas funções de várias maneiras, usando ferramentas como
both
, pipe
e compose
. - O uso parcial (currying) nos ajuda a entender quando e como pode ser útil fornecer alguns argumentos para uma função e poder fornecer o restante posteriormente. Usamos
partial
e curry
para nos ajudar com isso e aprender sobre flip
e espaço reservado ( __
) - A programação declarativa nos ensina a diferença entre programação imperativa e declarativa. Aprenderemos como usar substitutos declarativos do Ramda para aritmética, comparações, lógica e condições.
- A notação sem noção introduz a idéia de um estilo sem noção, também conhecido como "programação silenciosa". Em um estilo inútil, não vemos argumentos com os dados com os quais estamos trabalhando, isso é feito implicitamente. Nossos programas são compostos de pequenos blocos simples que se reúnem para fazer o que precisamos. Somente no final aplicamos nossas funções compostas a dados relevantes.
- A imutabilidade e os objetos nos traz de volta à ideia de trabalhar em um estilo declarativo; é o momento de obter as ferramentas necessárias para ler, atualizar, modificar, excluir e transformar propriedades dos objetos.
- Imutabilidade e matrizes continua o tópico e mostra como executar operações semelhantes com matrizes.
- As lentes completam a série juntamente com a introdução do conceito de lentes, um design que nos permite focar em pequenas partes de grandes estruturas de dados. Usando as funções de
view
, set
e over
, podemos ler, atualizar e transformar o valor em que a lente está focada no contexto de grandes estruturas de dados.
O que vem a seguir?
Não cobrimos todos os meandros do Ramda nesta série de artigos. Em particular, não falamos sobre funções de string e nem sobre conceitos mais complexos, como transdutores .
Para saber mais sobre o que o Ramda pode fazer, recomendo que você estude sua documentação . Há uma riqueza de informações. Todas as funções são agrupadas pelo tipo de dado com o qual trabalham, embora exista alguma sobreposição. Por exemplo, algumas das funções para trabalhar com matrizes também funcionam com seqüências de caracteres, e o map
funciona com matrizes e objetos.
Se você estiver interessado em tópicos funcionais mais complexos, aqui estão alguns lugares que você pode acessar:
- Transdutores: aqui você pode ler um bom artigo introdutório sobre como analisar logs usando transdutores.
- Tipos de dados algébricos: Se você leu o suficiente sobre programação funcional, já ouviu falar sobre tipos algébricos e termos como “Functor”, “Applicator” e “Monad”. Se você estiver interessado em explorar essas idéias no contexto do Ramda, confira o projeto ramda-fantasy , que implementa alguns tipos de dados que atendem à especificação Fantasy Land (ou à Algebraic JavaScript Specification)
Do autor da tradução de artigos: se isso agrada ao Senhor, continuarei traduzindo artigos sobre Ramda, em particular, quero traduzir um artigo sobre o uso de ramda com redux , um artigo sobre componentes funcionais com funções sem estado React e o Ramda , um artigo sobre redutores e seletores modulares , e provavelmente um artigo sobre a globalização de seletores de redux .