Coder Social home page Coder Social logo

rs-ws-2020-fp's Introduction

Rocketseat Workshop 2020 - Curry, aplicação parcial e composição de funções

Nesse workshop vamos aprender sobre higher order functions, curry, aplicação parcial e como essas técnicas de programação funcional facilitam composição de funções.

No final vamos escrever uma pequena aplicação ilustrando como utilizando essas técnicas conseguimos deixar nosso código declarativo, expressivo, legível e extensível.

O workshop

Os conceitos listados serão apresentados utilizando javascript (Node.JS) como linguagem.

Etapas

O workshop será dividido nas seguintes etapas:

1 . Higher order functions

  • o que são ?
  • por que ?
  • exemplos
    • onde são utilizados na "standard library"
    • outras aplicações práticas

2 . Curry

  • o que é ?
  • exemplos

3 . Aplicação parcial

  • o que é ?
  • exemplos ?
  • porque ?

4 . Composição facilitada

  • o que é ?
  • utilizando os conceitos apresentados para escrever código declarativo
  • adicionando funcionalidades através de composição

5 . Aplicação

  • um crawler concorrente
    • api com rate limiting

Acompanhando

A condução do workshop será feita via live coding no arquivo workshop/index.js. Esse arquivo terá live reload habilitado: estará sendo "escutado" para que quando ele seja salvo, seja re-executado e os resultados sejam apresentados no terminal.

A cada etapa, esse arquivo será modificado para apresentar os conceitos das mesmas.

Pré-requisitos

Para conseguir acompanhar o workshop será necessário ter no ambiente

  • Docker e docker-compose
  • Git
  • Conta no Github
  • Última versão de Node.JS (14+)
    • recomendo a utilização do NVM
  • Preparar sua versão do repositório
    • fork desse repositório
    • git clone do repositório
    • executar no diretório do projeto
    # caso tenha optado pelo uso do nvm
    # (a versão de node vem do arquivo .nvmrc na raíz)
    nvm install
    nvm use
    
    # instalar as dependências
    npm install

Executando

Recomendo a utilização de algum editor de texto ou terminal que permita split de tela, dessa forma é possível manter o arquivo aberto pra edição e o terminal lado a lado pra ver o resultado das mudanças simultaneamente.

Para executar o arquivo workshop/index.js e editá-lo no modo live reload descrito acima

npm start

Para execução da Etapa 5 (crawler concorrente de api de catálogo de produtos), será necessário iniciar a API que será crawleada localmente. Para isso basta.

# inicia a API de catálogo de produtos utilizando docker-compose
npm run api

O código da API está no diretório api (Node.JS). Os produtos e categorias são hardcoded em memória mesmo.

Outros comandos da api

# verifica o status da API
npm run api:status

# derruba a API
npm run api:kill

Pós workshop

Código produzido

Todo código produzido nesse workshop está disponível no branch cheat-sheet dentro do diretório workshop segmentado em um arquivo por etapa.

PS: exceto pelo arquivo workshop/4-challenge que contém o crawler concorrente, os outros arquivos são um catadão de funções utilizadas durante o workshop, os arquivos não necessariamente executam corretamente i.e. use como referência, não como scripts

Lição de casa

1 . Tente implementar sua própria versão da função concurrently apresentada no workshop sem utilizar a dependência pMap (Dicas: as funções Promise.all, reduce e splitEvery - do ramda para fazer chunks de lista - são suas amigas; entender como o serially funciona pode ajudar)

2 . Pense como seria se a API tivesse algum mecanismo de autenticação e os endpoints fossem autenticados via token.

2.1 . Assumindo que o token tem duração maior do que o processo como um todo, como poderíamos transmitir esse token internamente pras nossas funções que executam as requests?

2.2 . Assumindo que o token pode expirar durante o processo, como poderíamos lidar com isso?

Referências

Esse workshop foi inspirado nesse artigo que escrevi há um tempo atrás que fala sobre esses conceitos de programação funcional. Pode ser útil caso queira ler com mais calma do que o ritmo do workshop. Além disso, dentro dele tem diversas referências há outros artigos que lidam com cada conceito individualmente e com mais profundidade, recomendo a leitura deles também.

rs-ws-2020-fp's People

Contributors

rodrigobotti avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.