TypeScript Academy · Lektion

Sammensætning af effekter

Kæd og kombinér effekter med pipe og generators

Lektion 3 af 413 trin

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 30

map: 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.

Gratis at komme i gang

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

  1. Hvorfor effektsystemer er vigtige
  2. Effekttypen
  3. Sammensætning af effekter
  4. Fejlkanaler og afhængigheder
← Tilbage til TypeScript Academy