Por que os Sistemas de Efeitos São Importantes
Torne efeitos colaterais e falhas explícitos e combináveis.
Por que os Sistemas de Efeitos São Importantes é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.
Por que os sistemas de efeitos são importantes
Um sistema de efeitos torna os efeitos colaterais, as falhas e as dependências explícitos e combináveis no sistema de tipos. Em vez de lançamentos ocultos e E/S implícita, cada efeito é um valor que você pode passar, transformar e combinar.
Problemas com código assíncrono e lançamento de exceções
O uso simples de async/await com throw oculta informações cruciais: a assinatura da função não informa quais erros ela pode lançar nem de quais recursos precisa.
async function getUser(id: number): Promise<User> {
// may throw NotFoundError, may throw NetworkError
// needs a database connection from... somewhere
// none of this is in the type
return await db.users.find(id);
}Os erros são invisíveis
Promise<User> não informa nada sobre os modos de falha. O código chamador não consegue saber quais erros tratar, então captura erros demais ou esquece completamente alguns casos.
As dependências são implícitas
A função acima depende silenciosamente de um banco de dados. Essa dependência é obtida de uma variável global ou de uma importação, o que torna os testes e a substituição difíceis e oculta o contrato verdadeiro.
O que é um valor de efeito
Um efeito é uma descrição de uma computação, não a própria computação. Criá-lo não faz nada; você o executa mais tarde. Isso torna os efeitos valores puros que podem ser compostos como dados.
import { Effect } from "effect";
// A description: produces number, no errors, no requirements
const program = Effect.succeed(42);
// Nothing has run yet.Falhas explícitas
Os efeitos carregam seus possíveis erros no tipo, portanto o compilador obriga você a tratá-los ou propagá-los deliberadamente.
import { Effect } from "effect";
const risky = Effect.fail(new Error("boom"));
// type encodes that this can fail with ErrorDependências explícitas
Os efeitos também registram os serviços necessários em seu tipo. Uma computação que precisa de um Database declara isso e não pode ser executada até que um seja fornecido.
Composição
Como os efeitos são valores, você os combina com operadores (map, flatMap, zip) assim como faria com vetores ou promessas, mas com os canais de erro e de dependências sendo carregados automaticamente.
Execução adiada
Nada acontece até que você execute explicitamente o efeito, por exemplo, com Effect.runPromise. Essa separação entre descrição e execução permite novas tentativas, interrupção e testes sem reativar efeitos colaterais.
import { Effect } from "effect";
const program = Effect.succeed(1);
// Run at the edge of your app:
// const result = await Effect.runPromise(program);Comparação com promessas
Uma Promise é imediata (é executada imediatamente), não possui tipagem para erros e ignora dependências. Um Effect é tardio, tem erros tipados e considera as dependências: é um superconjunto estrito das informações.
Por que isso é importante
Tornar explícitos os efeitos, os erros e as dependências significa que o compilador impõe o tratamento correto, que o código pode ser testado substituindo-se as dependências e que fluxos assíncronos complexos podem ser compostos com confiabilidade, que é a motivação por trás de bibliotecas como Effect-TS.
Verificação rápida
Teste sua compreensão de por que os sistemas de efeitos são importantes.
Recapitulação
Os sistemas de efeitos tornam explícitos os efeitos colaterais, as falhas e as dependências. Diferentemente das promessas imediatas, que ignoram erros e ocultam dependências, um efeito é uma descrição tardia e combinável de uma computação cujo tipo carrega informações sobre sucesso, erro e requisitos, permitindo composição confiável e testabilidade.
Perguntas Frequentes
A aula “Por que os Sistemas de Efeitos São Importantes” é grátis?
Sim — o texto completo de “Por que os Sistemas de Efeitos São Importantes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.
O que vou aprender em “Por que os Sistemas de Efeitos São Importantes”?
Torne efeitos colaterais e falhas explícitos e combináveis. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Por que os Sistemas de Efeitos São Importantes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que os Sistemas de Efeitos São Importantes
- O Tipo Effect
- Compondo Efeitos
- Canais de Erro e Dependências