0Pricing
TypeScript Academy · Lektion

Effekte komponieren

Verketten und kombinieren Sie Effekte mit pipe und Generatoren.

Effekte komponieren ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Effekte komponieren

Effekte sind Werte, daher erstellen Sie Programme, indem Sie sie komponieren. Die wichtigsten Werkzeuge sind Effect.pipe, Effect.map, Effect.flatMap und die generatorbasierte Syntax Effect.gen.

pipe: Durch Funktionen weiterreichen

pipe reicht einen Effekt von links nach rechts durch eine Reihe von Transformationen weiter und vermeidet tiefe Verschachtelungen.

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: Den Erfolgswert transformieren

Effect.map wendet eine reine Funktion auf den Erfolgswert an und lässt die Fehler- und Abhängigkeitskanäle unverändert.

import { Effect } from "effect";

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

flatMap: Effekte aufeinanderfolgen lassen

Wenn der nächste Schritt selbst ein Effekt ist, verwenden Sie flatMap (auch chain genannt). Der erste Effekt wird ausgeführt und sein Wert anschließend an eine Funktion übergeben, die einen weiteren Effekt zurückgibt.

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 im Vergleich zu flatMap

Verwenden Sie map, wenn Ihre Funktion einen einfachen Wert zurückgibt, und flatMap, wenn sie einen Effekt zurückgibt. Wenn Sie bei einer Funktion, die einen Effekt zurückgibt, map verwenden, erhalten Sie einen verschachtelten Effekt.

Kanäle sammeln sich an

Wenn Sie Effekte aufeinanderfolgen lassen, werden ihre Fehlertypen zu Vereinigungen zusammengeführt, ebenso wie ihre Abhängigkeiten. Der zusammengesetzte Typ bildet alles ab, was fehlschlagen kann, und alles, was benötigt wird.

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

Effect.gen: Generatorsyntax

Effect.gen ermöglicht es Ihnen, sequenziellen Effektcode zu schreiben, der wie async/await gelesen werden kann. Mit yield* entpacken Sie dabei jeden 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 im Vergleich zu pipe

gen ist übersichtlicher bei linearen Abläufen mit mehreren Schritten und Zwischenvariablen; pipe eignet sich besonders für kurze Transformationsketten. Beide lassen sich frei miteinander kombinieren.

Unabhängige Effekte kombinieren

Effect.all führt mehrere Effekte aus und sammelt ihre Ergebnisse. Dabei werden die Fehler und Abhängigkeiten aller Effekte zusammengeführt.

import { Effect } from "effect";

const both = Effect.all([Effect.succeed(1), Effect.succeed("x")]);
// Effect<[number, string], never, never>

Weiterhin verzögert

All das beschreibt nur das Programm. Es wird nichts ausgeführt, bis Sie es am Rand des Programms mit Effect.runPromise oder Effect.runSync ausführen.

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

Warum das wichtig ist

Komposition macht Effekte praktisch nutzbar: Sie setzen kleine, typisierte Bausteine zu großen Programmen zusammen, während der Compiler jeden Fehler und jede Abhängigkeit verfolgt. map, flatMap, pipe und gen sind die alltäglichen Verben des Effect-Codes.

Kurzer Check

Prüfen Sie Ihr Verständnis der Komposition von Effekten.

Zusammenfassung

Sie komponieren Effekte mit map (Erfolgswerte transformieren), flatMap (Schritte sequenzieren, die Effekte zurückgeben), pipe (Transformationen miteinander verketten) und Effect.gen (Generator-Syntax ähnlich wie bei await). Fehler- und Anforderungskanäle werden als Unions zusammengeführt, und nichts wird ausgeführt, bevor Sie den Effekt am Rand ausführen.

Häufig gestellte Fragen

Ist die Lektion „Effekte komponieren“ kostenlos?

Ja — der vollständige Text von „Effekte komponieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Effekte komponieren“?

Verketten und kombinieren Sie Effekte mit pipe und Generatoren. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Effekte komponieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Effektsysteme wichtig sind
  2. Der Effect-Typ
  3. Effekte komponieren
  4. Fehlerkanäle und Abhängigkeiten
← Zurück zu TypeScript Academy