主题
- #fp
- #程式庫
- #函數式編碼
- #Effect
- #框架
durumis AI 总结的文章
- 在函數式編碼庫中,fp-ts 因專注於函數式映射和單子而受到歡迎,但隨著整合到 Effect 中,其性質已轉變為框架。
- 與以往的程式庫不同,Effect 就像框架一樣運作,要使用 Effect 物件需要相關知識。
- Effect 使用類似 RxJs 的 Observable,以 Effect 包裹物件,預計它有可能為 Node.js 行業樹立新的標準。
AI 翻译的文章。
durumis AI 总结的文章
過去幾年來,函數式編碼相當流行。
物件導向提供了架構,
而函數式編碼則提升了程式碼細節的簡潔性。
當然,函數式編碼的流行趨勢會以幾年的週期持續出現。
隨著函數式編碼的流行,各種函式庫開始出現。
就我個人而言,FxTs僅僅是利用生成器(generator)來建立延遲評估(lazy evaluation)的工具包。
lodash也給人同樣的工具包感覺。
當然,這些工具包確實有助於宣告式編程。
但我們想要的函數式編程並非如此,而是映射(map)、函數應用(apply)和單子(monad),以及更多單子。
fp-ts符合了這個要求,而且其維護者也真心熱愛函數式編程。
然而,幾個月前,我聽說這個函式庫Effect已經合併。
因此,我查看了Effect,發現有些不同。
函式庫只要 API 公開良好,就可以直接拿來使用,但框架則需要對其套件有足夠的理解。
import { Effect, Console } from "effect" let i = 1 const expensiveTask = Effect.promise(() => { console.log("expensive task...") return new Promise((resolve) => { setTimeout(() => { resolve(result ${i++}) }, 100) }); }) const program = Effect.gen(function* () { console.log("non-cached version:") yield* expensiveTask.pipe(Effect.andThen(Console.log)) yield* expensiveTask.pipe(Effect.andThen(Console.log)) console.log("cached version:") const cached = yield* Effect.cached(expensiveTask) yield* cached.pipe(Effect.andThen(Console.log)) yield* cached.pipe(Effect.andThen(Console.log)) }) Effect.runFork(program) /* Output: non-cached version: expensive task... result 1 expensive task... result 2 cached version: expensive task... result 3 result 3 */
像這樣的Effect,並非用 Observable 包裹,而是用 Effect 包裹物件,
就像async關鍵字一樣,具有傳染性。
Effect物件的使用需要相應的函數也變成Effect。
就像上面程式碼中的program一樣。
當然,作為入口點的函數確實存在,但這並不夠吸引人。
總之,Effect的形態和簡潔性體現了其框架的角色,我期待它能為 Node 社群帶來新的風氣和標準。