O que é Effect-ts e para que serve?
\n\nEffect-ts é uma biblioteca poderosa para TypeScript que traz para a linguagem conceitos de programação funcional, permitindo escrever código limpo, componível e type-safe. Ela resolve um dos principais problemas no desenvolvimento com TypeScript (e JavaScript em geral) — o gerenciamento de efeitos colaterais (side effects).
\n\nNa programação imperativa tradicional, os efeitos colaterais (trabalho com rede, arquivos, bancos de dados, geração de números aleatórios, trabalho com tempo) estão espalhados por todo o código, tornando-o difícil de testar, depurar e analisar. Effect-ts oferece uma abordagem elegante: todos os efeitos colaterais são descritos como dados (valores) que podem ser combinados, transformados e executados em um ambiente controlado.
\n\nPrincipais vantagens do Effect-ts:
\n- \n
- Type-safety: O compilador TypeScript verifica tipos de erros e resultados bem-sucedidos no nível dos tipos. \n
- Componibilidade: Efeitos são facilmente combinados usando funções como map, flatMap, zip e outras. \n
- Gerenciamento de erros: Erros são tratados como parte do tipo do efeito, não através de exceções. \n
- Testabilidade: Dependências (por exemplo, clientes HTTP, bancos de dados) podem ser facilmente substituídas. \n
- Concorrência: Suporte embutido para assincronicidade, paralelismo e cancelamento de operações. \n
- Previsibilidade: O código se torna mais declarativo e mais fácil de entender. \n
Effect-ts é especialmente útil em projetos grandes, onde confiabilidade, testabilidade e escalabilidade são importantes. Ele é usado em desenvolvimento backend (Node.js), frontend (React) e até mesmo em aplicativos móveis.
\n\nInstalação
\n\nPara instalar o Effect-ts no seu projeto, use npm ou yarn:
\n\nnpm install effect\n\nou
\n\nyarn add effect\n\nCertifique-se também de ter o TypeScript versão 4.7 ou superior instalado:
\n\nnpm install typescript --save-dev\n\nPara trabalhar com Effect-ts, você precisará configurar o tsconfig.json, ativando o modo estrito (strict: true) e, de preferência, target: "ES2020" ou superior.
\n\nInício rápido com exemplo de código
\n\nVamos escrever um programa simples que lê o nome do usuário da linha de comando e exibe uma saudação. Isso mostrará o conceito básico do Effect-ts: descrição do efeito e sua execução.
\n\nimport { Effect, Console } from "effect"\n\n// Descrevemos o efeito: solicitar o nome\nconst askName: Effect.Effect<string> = Effect.sync(() => {\n // Em uma aplicação real, aqui haveria uma entrada do teclado\n return "Alexei"\n})\n\n// Descrevemos o efeito: exibir saudação\nconst greet = (name: string): Effect.Effect<void> =>\n Console.log(`Olá, ${name}!`)\n\n// Combinamos os efeitos\nconst program: Effect.Effect<void> = askName.pipe(\n Effect.flatMap(greet)\n)\n\n// Executamos o programa\nEffect.runSync(program)\n// Saída: Olá, Alexei!\n\nNeste exemplo:
\n- \n
Effect.sync— cria um efeito a partir de uma função síncrona. \n Console.log— é um efeito para exibir no console. \n pipe— permite aplicar funções sequencialmente ao valor. \n flatMap— é usado para executar efeitos sequencialmente. \n Effect.runSync— executa o efeito de forma síncrona (apenas para efeitos síncronos). \n
Principais métodos e funções do Effect-ts
\n\n1. Effect.sync
\nO que faz: Cria um efeito que encapsula uma função síncrona. A função é executada de forma lazy (apenas quando o efeito é iniciado).
\nParâmetros:
\n- \n
f: () => A— função síncrona que retorna um valor do tipo A. \n
Exemplo:
\nimport { Effect } from "effect"\n\nc Também na biblioteca
Registro para JavaScript (Node.js): melhores soluções
Cliente HTTP para C++: as melhores bibliotecas para trabalhar com rede
Trabalho com ZIP/arquivos em Swift (iOS/macOS): guia completo
Spectre.Console para C# (.NET): guia completo com exemplos