30 Punkte von xguru 2024-06-17 | 3 Kommentare | Auf WhatsApp teilen
  • "The missing Standard Library for TypeScript"
  • Entwickelt, um komplexe synchrone/asynchrone Programme einfach erstellen zu können
  • Macht Code stärker composable, reusable und testable
  • Maximale Type-Safety (einschließlich Error Handling)
  • Bietet zahlreiche Bibliotheken
  • Bietet Clustering & Workflow (Alpha-Version)
  • Breite Kompatibilität
    • Node, Deno, Bun, Cloudflare Workers, Chrome
    • React, Solid.JS, Vite, Next.JS, Tauri
  • Wichtige Merkmale
    • Concurrency: Mit einem Fiber-basierten Nebenläufigkeitsmodell lassen sich hochgradig skalierbare Anwendungen mit extrem niedriger Latenz umsetzen
    • Composability: Mit kleinen, wiederverwendbaren Bausteinen lassen sich wartbare, gut lesbare und flexible Software-Systeme entwickeln
    • Resource Safety: Auch wenn ein Programm fehlschlägt, lassen sich Erwerb und Freigabe von Ressourcen sicher verwalten
    • Type Safety: Durch den Fokus auf Typinferenz und Type Safety lässt sich das TypeScript-Typsystem maximal ausnutzen
    • Error Handling: Mit integrierten Funktionen zur Fehlerbehandlung lassen sich Fehler strukturiert und zuverlässig behandeln
    • Asynchronicity: Code kann so geschrieben werden, dass er unabhängig davon, ob er synchron oder asynchron ist, gleich aussieht
    • Observability: Dank vollständiger Tracing-Funktionen lässt sich die Programmausführung leicht debuggen und überwachen

Warum Effect?

  • Programmieren ist schwierig
  • Beim Erstellen von Bibliotheken und Apps werden viele Werkzeuge genutzt, um Komplexität zu beherrschen
  • Effect schlägt eine neue Denkweise für TypeScript-Programmierung vor
  • Mit den Werkzeugen des Effect-Ökosystems lassen sich bessere Anwendungen und Bibliotheken entwickeln
  • Dadurch kann man die TypeScript-Sprache und ihr Typsystem besser verstehen und Programme zuverlässiger und wartbarer machen.

Das Effect-Muster

  • In gewöhnlichem TypeScript-Code wird oft angenommen, dass eine Funktion entweder erfolgreich ist oder eine Exception wirft
    • Beispiel: Die Funktion divide wirft bei einer Division durch 0 eine Exception
  • Allein am Typ ist nicht erkennbar, dass diese Funktion eine Exception werfen kann
  • Wenn eine Codebasis Hunderte oder Tausende Funktionen enthält, wird dieses Problem größer
  • Es ist leicht, Fehlerbehandlung zu vergessen, und schwer, sie zu verwalten
  • Der TypeScript-Compiler ist die erste Verteidigungslinie gegen Bugs, Domänenfehler und allgemeine Komplexität

Das Effect-Muster anwenden

  • Die zentrale Einsicht von Effect ist, dass sich das Typsystem nutzen lässt, um nicht nur Erfolgswerte, sondern auch Fehler und "Kontext" nachzuverfolgen
    • Beispiel: Die Effect-Version der Funktion divide wirft keine Exception, sondern gibt den Fehler an den Aufrufer weiter
  • Es bietet Funktionen zur Verwaltung von Fehlern und Erfolgswerten
  • Durch Kontextverfolgung können Funktionen zusätzliche Informationen erhalten, ohne dass alle Argumente weitergereicht werden müssen
    • Beispiel: Während Tests kann die reale Implementierung eines externen Dienstes durch ein Mock-Objekt ersetzt werden
import { Effect } from "effect"  
   
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>  
  b === 0  
    ? Effect.fail(new Error("Cannot divide by zero"))  
    : Effect.succeed(a / b)  

Das Effect-Ökosystem

  • Die einzigartige Einsicht von Effect in Kombination mit weiteren Werkzeugen bildet ein reichhaltiges Bibliotheks-Ökosystem, mit dem sich komplexe Anwendungen einfach erstellen lassen
  • Dinge, die früher unmöglich erschienen, sind heute selbstverständlich
  • Das Effect-Ökosystem wächst schnell und kann auf GitHub von Effect eingesehen werden

Das Rad nicht neu erfinden

  • In TypeScript-Anwendungscode werden oft dieselben Probleme immer wieder gelöst
  • Die Interaktion mit externen Diensten, Dateisystemen und Datenbanken ist ein gemeinsames Problem für alle Anwendungsentwickler
  • Effect bietet ein reichhaltiges Bibliotheks-Ökosystem mit standardisierten Lösungen für diese Probleme
  • Ohne zahlreiche Abhängigkeiten installieren zu müssen, löst Effect viele Probleme auf einmal

Praktische Problemlösung

  • Effect ist von Scala und Haskell inspiriert.
  • Das Ziel von Effect ist jedoch, ein praktisches Toolkit bereitzustellen, das die alltäglichen Probleme beim Aufbau von TypeScript-Anwendungen und -Bibliotheken löst

Mit Spaß lernen

  • Effect zu lernen macht Spaß
  • Viele Entwickler lösen mit Effect in der Praxis reale Probleme
  • Man kann zunächst nur Teile des Effect-Ökosystems einsetzen und nach und nach mehr Werkzeuge nutzen
  • Anfangs mögen die Konzepte von Effect ungewohnt sein, aber wenn man sich Zeit nimmt, die Dokumentation zu lesen und die Kernkonzepte zu verstehen, hilft das später beim Einsatz fortgeschrittener Werkzeuge
  • Die Effect-Community ist immer bereit, beim Lernen und Wachsen zu helfen. Siehe Discord oder GitHub

3 Kommentare

 
firea32 2024-06-24

Es scheint eine ähnliche Ausrichtung zu haben wie das, was den Kern von Rust ausmacht.

 
toaonly 2024-06-17

Ich muss es wohl noch etwas länger nutzen, um das wirklich beurteilen zu können, aber im Vergleich zu fp-ts lässt es sich deutlich angenehmer verwenden.

 
seunggi 2024-06-17

fp-ts entwickelt Version 3.0 nicht weiter und hat sich entschieden, sich effect anzuschließen.

Wenn Sie fp-ts verwenden, lohnt es sich, effect in Betracht zu ziehen.

https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts