TypeScript Academy · leksjon

Kombinere effekter

Kjed sammen og kombiner effekter med pipe og generatorer.

Leksjon 3 av 413 trinn

Kombinere effekter er en gratis leksjon i TypeScript Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i TypeScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.

Komponere effekter

Effekter er verdier, så du bygger programmer ved å komponere dem. De viktigste verktøyene er Effect.pipe, Effect.map, Effect.flatMap og den generatorbaserte syntaksen Effect.gen.

pipe: Føre gjennom funksjoner

pipe sender en effekt gjennom en rekke transformasjoner fra venstre mot høyre, slik at du unngår dyp nøsting.

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: Transformere suksessverdien

Effect.map bruker en ren funksjon på suksessverdien, mens feil- og kravkanalene forblir uendret.

import { Effect } from "effect";

const doubled = Effect.map(Effect.succeed(21), (n) => n * 2);
// Effect<number, never, never>

flatMap: Sekvensere effekter

Når neste trinn selv er en effekt, bruker du flatMap (også kalt chain). Den kjører den første effekten og sender deretter verdien til en funksjon som returnerer en annen 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

Bruk map når funksjonen returnerer en vanlig verdi; bruk flatMap når den returnerer en effekt. Hvis du bruker map med en funksjon som returnerer en effekt, får du en nøstet effekt.

Kanalene samles

Når du sekvenserer effekter, slås feiltypene deres sammen til unioner, og kravene deres slås også sammen. Den komponerte typen gjenspeiler alt som kan mislykkes, og alt som kreves.

// Effect<A, E1, R1> then Effect<B, E2, R2>
// => Effect<B, E1 | E2, R1 | R2>

Effect.gen: Generatorsyntaks

Effect.gen lar deg skrive sekvensiell effektkode som ligner på async/await, ved å bruke yield* til å pakke ut 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 for lineære flyter med flere trinn og mellomliggende variabler; pipe passer best for korte transformasjonskjeder. De kan fritt brukes sammen.

Kombinere uavhengige effekter

Effect.all kjører flere effekter og samler resultatene deres, samtidig som feil 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>

Fortsatt lat

Alt dette beskriver bare programmet. Ingenting kjøres før du kjører det ved ytterkanten med Effect.runPromise eller Effect.runSync.

import { Effect } from "effect";
// const result = await Effect.runPromise(program);

Hvorfor dette er viktig

Komposisjon er det som gjør effekter praktiske: Du setter sammen små, typebestemte deler til store programmer, mens kompilatoren holder oversikt over alle feil og avhengigheter. map, flatMap, pipe og gen er hverdagsverbene i Effect-kode.

Hurtigsjekk

Sjekk forståelsen din av hvordan effekter komponeres.

Oppsummering

Du komponerer effekter med map (transformerer suksessverdier), flatMap (sekvenserer trinn som returnerer effekter), pipe (fører verdier gjennom transformasjoner) og Effect.gen (generator-syntaks som ligner på await). Feil- og kravkanalene samles som unioner, og ingenting kjører før du utfører effekten ytterst i programmet.

Gratis å komme i gang

Lær deg TypeScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
101
Leksjoner
352

Ofte stilte spørsmål

Er leksjonen «Kombinere effekter» gratis?

Ja – hele teksten i «Kombinere effekter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av TypeScript Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Kombinere effekter»?

Kjed sammen og kombiner effekter med pipe og generatorer. Du øver på TypeScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med TypeScript Academy?

Ingen tidligere erfaring er nødvendig. TypeScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Kombinere effekter»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne TypeScript Academy-leksjonen?

Ja. Alle TypeScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hvorfor effektsystemer er viktige
  2. Effect-typen
  3. Kombinere effekter
  4. Feilkanaler og avhengigheter
← Tilbake til TypeScript Academy