Heim > Web-Frontend > js-Tutorial > Hauptteil

Verwendung der do-Notation in Effect-TS Optionals

PHPz
Freigeben: 2024-07-23 10:32:23
Original
981 Leute haben es durchsucht

Using do Notation in Effect-TS Optionals

Effect-TS bietet eine leistungsstarke Möglichkeit, Vorgänge im Optionskontext mithilfe der Do-Notation zu verarbeiten. In diesem Artikel wird untersucht, wie mehrere Vorgänge mit der Do-Notation sequenziert werden, und verschiedene Szenarios anhand von Beispielen demonstriert.

Beispiel 1: Grundlegende Sequenzierung und Filterung

In diesem Beispiel binden wir Werte innerhalb des Optionskontexts, berechnen eine Summe und filtern basierend auf einer Bedingung.

import { Option as O, pipe } from 'effect';

function do_ex01() {
  const result = pipe(
    O.Do,
    O.bind('x', () => O.some(2)), // Bind x to the value 2 wrapped in Some
    O.bind('y', () => O.some(3)), // Bind y to the value 3 wrapped in Some
    O.let('sum', ({ x, y }) => x + y), // Let sum be the sum of x and y
    O.filter(({ x, y }) => x * y > 5) // Filter the result if x * y > 5
  );
  console.log(result); // Output: Some({ x: 2, y: 3, sum: 5 }) (since 2 * 3 > 5)
}
Nach dem Login kopieren

Erklärung:

  • Bindende Werte: Wir binden x an 2 und y an 3, beide verpackt in Some.
  • Summe berechnen: Wir berechnen die Summe als Summe von x und y.
  • Filterung: Wir filtern das Ergebnis basierend auf der Bedingung x * y > 5.

Die Ausgabe ist Some({ x: 2, y: 3, sum: 5 }), weil die Bedingung 2 * 3 > 5 ist erfüllt.

Beispiel 2: Filtern mit einer fehlgeschlagenen Bedingung

Dieses Beispiel zeigt, dass das Ergebnis „Keine“ ist, wenn die Filterbedingung fehlschlägt.

function do_ex02() {
  const result = pipe(
    O.Do,
    O.bind('x', () => O.some(1)), // Bind x to the value 1 wrapped in Some
    O.bind('y', () => O.some(2)), // Bind y to the value 2 wrapped in Some
    O.let('sum', ({ x, y }) => x + y), // Let sum be the sum of x and y
    O.filter(({ x, y }) => x * y > 5) // Filter the result if x * y > 5
  );
  console.log(result); // Output: None (since 1 * 2 <= 5)
}
Nach dem Login kopieren

Erklärung:

  • Bindende Werte: Wir binden x an 1 und y an 2.
  • Summe berechnen: Wir berechnen die Summe als Summe von x und y.
  • Filterung: Wir filtern das Ergebnis basierend auf der Bedingung x * y > 5.

    Die Ausgabe ist „Keine“, da die Bedingung 1 * 2 <= 5 fehlschlägt.

    Beispiel 3: Bindung mit None

    Dieses Beispiel zeigt, dass, wenn eine Bindung None ist, das Ergebnis None ist.

    function do_ex03() {
      const result = pipe(
        O.Do,
        O.bind('x', () => O.some(2)), // Bind x to the value 2 wrapped in Some
        O.bind('y', () => O.none()), // Bind y to None
        O.let('sum', ({ x, y }) => x + y), // This line won't execute since y is None
        O.filter(({ x, y }) => x * y > 5) // This line won't execute since y is None
      );
      console.log(result); // Output: None (since y is `None`)
    }
    </p>
    Nach dem Login kopieren

    Erklärung:

    • Bindende Werte: Wir binden x an 2 und y an Keine.
    • Berechnung und Filterung überspringen: Da y „None“ ist, werden die nachfolgenden Vorgänge übersprungen.

    Die Ausgabe ist „None“, da eine der Bindungen (y) „None“ ist.

    Zusammenfassung

    Die do-Notation in Effect-TS ermöglicht eine elegante und lesbare Reihenfolge von Operationen innerhalb des Option-Kontexts. Durch das Binden von Werten, das Zulassen berechneter Werte und das Filtern basierend auf Bedingungen können wir komplexe optionale Logik auf einfache Weise handhaben. Die obigen Beispiele veranschaulichen, wie sich das Ergebnis je nach unterschiedlichen Bedingungen und dem Vorhandensein von None ändert.

    Das obige ist der detaillierte Inhalt vonVerwendung der do-Notation in Effect-TS Optionals. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage