- "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
Parece seguir uma linha bem parecida com os princípios centrais que o Rust tem.
Acho que preciso usar mais para saber ao certo, mas em comparação com o fp-ts dá para usar com muito mais conforto.
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