Sammensætning af effekter
Kæd og kombinér effekter med pipe og generators
Sammensætning af effekter er en gratis TypeScript Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i TypeScript Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. TypeScript Academy-kurset indeholder 4 lektioner i alt.
Sammensætning af effekter
Effekter er værdier, så du opbygger programmer ved at sammensætte dem. De centrale værktøjer er Effect.pipe, Effect.map, Effect.flatMap og den generatorbaserede syntaks Effect.gen.
pipe: Gennemløb af funktioner
pipe sender en effekt gennem en række transformationer fra venstre mod højre, så dyb indlejring undgås.
import { Effect, pipe } from "effect";
const program = pipe(
Effect.succeed(2),
Effect.map((n) => n + 1),
Effect.map((n) => n * 10)
);
// Effect<number, never, never> producing 30map: Transformation af succesværdien
Effect.map anvender en ren funktion på succesværdien, mens fejl- og kravkanalerne forbliver uændrede.
import { Effect } from "effect";
const doubled = Effect.map(Effect.succeed(21), (n) => n * 2);
// Effect<number, never, never>flatMap: Sekventiel afvikling af effekter
Når det næste trin selv er en effekt, skal du bruge flatMap (også kaldet chain). Den afvikler den første effekt og giver derefter dens værdi videre til en funktion, der returnerer endnu en effekt.
import { Effect, pipe } from "effect";
const getId = Effect.succeed(1);
const loadUser = (id: number) => Effect.succeed({ id, name: "Ada" });
const program = pipe(getId, Effect.flatMap(loadUser));
// Effect<{ id: number; name: string }, never, never>map kontra flatMap
Brug map, når din funktion returnerer en almindelig værdi; brug flatMap, når den returnerer en effekt. Hvis du bruger map med en funktion, der returnerer en effekt, får du en indlejret effekt.
Kanaler akkumuleres
Når du afvikler effekter sekventielt, samles deres fejltyper i unioner, og deres krav samles på samme måde. Den sammensatte type afspejler alt, hvad der kan gå galt, og alt, hvad der er nødvendigt.
// Effect<A, E1, R1> then Effect<B, E2, R2>
// => Effect<B, E1 | E2, R1 | R2>Effect.gen: Generatorsyntaks
Effect.gen lader dig skrive sekventiel effektkode, der læses som async/await, ved at bruge yield* til at udpakke hver effekt.
import { Effect } from "effect";
const program = Effect.gen(function* () {
const id = yield* Effect.succeed(1);
const user = yield* Effect.succeed({ id, name: "Ada" });
return user.name;
});
// Effect<string, never, never>gen kontra pipe
gen er tydeligere til lineære forløb med flere trin og mellemliggende variabler; pipe er bedst til korte transformationskæder. De fungerer frit sammen.
Kombination af uafhængige effekter
Effect.all afvikler flere effekter og samler deres resultater, mens fejl og krav fra dem alle akkumuleres.
import { Effect } from "effect";
const both = Effect.all([Effect.succeed(1), Effect.succeed("x")]);
// Effect<[number, string], never, never>Stadig doven
Alt dette beskriver kun programmet. Der udføres ikke noget, før du afvikler det ved kanten med Effect.runPromise eller Effect.runSync.
import { Effect } from "effect";
// const result = await Effect.runPromise(program);Hvorfor det er vigtigt
Komposition er det, der gør effekter praktiske: Du samler små, typede dele til store programmer, mens compileren holder styr på alle fejl og afhængigheder. map, flatMap, pipe og gen er de verber, du bruger til daglig i Effect-kode.
Hurtigt tjek
Tjek din forståelse af komposition af effekter.
Opsummering
Du komponerer effekter med map (transformerer succesværdier), flatMap (sekvenserer trin, der returnerer effekter), pipe (fører værdier gennem transformationer) og Effect.gen (await-lignende generatorsyntaks). Fejl- og kravkanalerne samles som unioner, og intet kører, før du udfører det ved kanten.
Lær TypeScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 101
- Lektioner
- 352
Ofte stillede spørgsmål
Er lektionen “Sammensætning af effekter” gratis?
Ja — hele teksten til “Sammensætning af effekter” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af TypeScript Academy-kurset, skal du opgradere til CoddyKit PRO. TypeScript Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Sammensætning af effekter”?
Kæd og kombinér effekter med pipe og generators Du øver dig i TypeScript Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på TypeScript Academy?
Der kræves ingen tidligere erfaring. TypeScript Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Sammensætning af effekter”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne TypeScript Academy-lektion?
Ja. Alle TypeScript Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor effektsystemer er vigtige
- Effekttypen
- Sammensætning af effekter
- Fejlkanaler og afhængigheder