Skip to content

Programação Funcional e Reativa

Este guia aborda os princípios de Programação Funcional (PF) e Programação Reativa aplicados ao desenvolvimento front-end moderno, especialmente no ecossistema React e Redux Saga.

1. Programação Funcional (PF)

A Programação Funcional é um paradigma que trata a computação como a avaliação de funções matemáticas e evita a mudança de estado e dados mutáveis.

Princípios Core

Imutabilidade

Dados não devem ser alterados após criados. Em vez de mudar um objeto, cria-se uma nova versão com as alterações.

  • Por que? Facilita o rastreamento de mudanças, melhora a performance do React (comparações de referência simples) e evita efeitos colaterais imprevisíveis.
  • Como: Use Spread operator (...), métodos imutáveis de array (map, filter, reduce) e evite push, splice ou atribuições diretas em propriedades de objetos.

Funções Puras

Uma função é pura se:

  1. Dada a mesma entrada, sempre retorna a mesma saída.
  2. Não possui efeitos colaterais (não altera variáveis globais, não faz log, não salva no banco).
  • Vantagem: Facilidade extrema de teste e previsibilidade.

Funções de Alta Ordem (HOF)

Funções que recebem outras funções como argumento ou retornam funções.

  • Exemplos: map, filter, compose, curry.

2. Paradigma Reativo

A Programação Reativa foca em fluxos de dados (streams) e na propagação de mudanças. Em vez de pedir um dado (Pull), você reage quando o dado chega (Push).

Streams e Observables

Imagine um fluxo constante de eventos (cliques, digitação, respostas de rede). Você pode observar esse fluxo e reagir a cada novo item.

Aplicação no Projeto

Redux Saga

O Redux Saga utiliza geradores para simular um comportamento reativo. Ele "escuta" (take) por ações enviadas ao sistema e reage disparando efeitos colaterais (call, put).

TanStack Query

Gerencia o estado do servidor de forma reativa: quando os dados no cache mudam ou expiram, os componentes que os utilizam são notificados e re-renderizados automaticamente.


3. Como aplicar no dia a dia

ConceitoComo fazerComo não fazer
Estadoconst newItems = [...items, newItem]items.push(newItem)
LógicaCriar funções puras em utils para cálculos.Colocar lógica de cálculo complexa dentro do useEffect.
EventosPensar em "Quando X acontecer, faça Y".Criar cadeias de funções que alteram estados globais diretamente.

4. Referências