30 pontos por xguru 2024-06-17 | 3 comentários | Compartilhar no WhatsApp
  • "The missing Standard Library for TypeScript"
  • Projetada para facilitar a criação de programas síncronos/assíncronos complexos
  • Torna o código mais composable, reusable e testable
  • Maximum Type-Safety (incluindo tratamento de erros)
  • Oferece diversas bibliotecas
  • Fornece clustering e workflows (versão alfa)
  • Ampla compatibilidade
    • Node, Deno, Bun, Cloudflare Workers, Chrome
    • React, Solid.JS, Vite, Next.JS, Tauri
  • Principais características
    • Concorrência (Concurrency): com um modelo de concorrência baseado em Fiber, permite criar aplicações altamente escaláveis e com latência ultrabaixa
    • Composabilidade (Composability): permite construir software fácil de manter, legível e flexível usando componentes pequenos e reutilizáveis
    • Segurança de recursos (Resource Safety): permite gerenciar com segurança a aquisição e liberação de recursos, mesmo quando o programa falha
    • Segurança de tipos (Type Safety): com foco em inferência e segurança de tipos, aproveita ao máximo o sistema de tipos do TypeScript
    • Tratamento de erros (Error Handling): permite tratar erros de forma estruturada e confiável com recursos embutidos
    • Assincronicidade (Asynchronicity): permite escrever código para que ele pareça o mesmo, seja síncrono ou assíncrono
    • Observabilidade (Observability): com rastreamento completo, facilita depurar e monitorar a execução do programa

Por que Effect?

  • Programar é difícil
  • Ao criar bibliotecas e apps, usamos muitas ferramentas para gerenciar a complexidade
  • Effect propõe uma nova forma de pensar a programação em TypeScript
  • Com as ferramentas do ecossistema Effect, é possível criar aplicações e bibliotecas melhores
  • Isso ajuda a entender melhor a linguagem TypeScript e seu sistema de tipos, além de tornar os programas mais confiáveis e fáceis de manter.

O padrão Effect

  • Em código TypeScript comum, assume-se que uma função terá sucesso ou lançará uma exceção
    • Ex.: a função divide lança uma exceção ao dividir por zero
  • Só olhando para o tipo, não dá para saber que essa função pode lançar uma exceção
  • Quando há centenas ou milhares de funções em uma base de código, esse problema cresce
  • É fácil esquecer de tratar exceções, e difícil gerenciá-las
  • O compilador do TypeScript é a primeira linha de defesa contra bugs, erros de domínio e complexidade em geral

Aplicando o padrão Effect

  • O principal insight do Effect é que o sistema de tipos pode ser usado para rastrear não só valores de sucesso, mas também erros e "contexto"
    • Ex.: a versão em Effect da função divide não lança exceção; ela propaga o erro para quem a chamou
  • Oferece recursos para gerenciar erros e valores de sucesso
  • O rastreamento de contexto permite fornecer informações adicionais às funções sem passar todos os argumentos
    • Ex.: durante testes, é possível substituir a implementação real de um serviço externo por um mock
import { Effect } from "effect"  
   
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>  
  b === 0  
    ? Effect.fail(new Error("Cannot divide by zero"))  
    : Effect.succeed(a / b)  

Ecossistema Effect

  • Os insights únicos do Effect, combinados com outras ferramentas, formam um rico ecossistema de bibliotecas que facilita a criação de aplicações complexas
  • Coisas que antes pareciam impossíveis agora se tornam algo comum
  • O ecossistema Effect está crescendo rapidamente e pode ser conferido no GitHub do Effect

Não reinvente a roda

  • No código de aplicações TypeScript, muitas vezes resolvemos os mesmos problemas repetidamente
  • Interagir com serviços externos, sistema de arquivos e bancos de dados é um problema comum a todo desenvolvedor de aplicações
  • Effect oferece um rico ecossistema de bibliotecas com soluções padronizadas para esses problemas
  • Sem precisar instalar várias dependências, Effect resolve muitos problemas de uma só vez

Resolvendo problemas práticos

  • Effect foi inspirado por Scala e Haskell.
  • Mas o objetivo do Effect é fornecer um kit de ferramentas prático para resolver os problemas do dia a dia ao criar aplicações e bibliotecas em TypeScript

Aprender se divertindo

  • Aprender Effect é divertido
  • Muitos desenvolvedores já usam Effect no trabalho para resolver problemas reais
  • Você pode começar usando apenas partes do ecossistema Effect e, aos poucos, aproveitar mais ferramentas
  • No início, os conceitos do Effect podem parecer pouco familiares, mas dedicar tempo à documentação e entender os conceitos centrais ajuda depois no uso de ferramentas mais avançadas
  • A comunidade Effect está sempre pronta para ajudar no aprendizado e no crescimento. Consulte o Discord ou o GitHub

3 comentários

 
firea32 2024-06-24

Parece seguir uma linha bem parecida com os princípios centrais que o Rust tem.

 
toaonly 2024-06-17

Acho que preciso usar mais para saber ao certo, mas em comparação com o fp-ts dá para usar com muito mais conforto.

 
seunggi 2024-06-17

O desenvolvimento do fp-ts 3.0 não vai continuar, e decidiram se juntar ao effect.

Se você usa fp-ts, vale a pena considerar o effect.

https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts