translation

AIが翻訳した投稿です。

Sunrabbit

まだ関数型ライブラリを使っていますか?

プロフィール画像

durumis AIが要約した投稿

  • 関数型コーディングライブラリの中で、fp-tsは関数型写像とモナドに焦点を当てて人気を得ていましたが、Effectに統合されることでフレームワーク的な性格に変化しました。
  • Effectは従来のライブラリとは異なり、フレームワークのように動作し、Effectオブジェクトを使用するには関連知識が必要です。
  • EffectはRxJsのObservableのように、Effectでラップされたオブジェクトを使用し、Node.js業界に新たな標準を提示する可能性があると予想されます。

ここ数年、関数型プログラミングはかなりの流行でした。


オブジェクト指向が形を作ってくれるなら

関数型プログラミングは詳細なコードの簡潔性をもたらしてくれたからです。


もちろん、関数型プログラミングの流行は、数年という周期で継続的に発生します。

このような関数型プログラミングの流行に伴い、様々なライブラリが登場し始めました。


FxTsfp-tslodashなど


私の感覚では、FxTsの場合、ジェネレーターを使用して遅延評価を作成したツールキットに過ぎませんでした。


lodashも同様に、ツールキットのような印象でした。



もちろん、これらのツールキットは、宣言型プログラミングに役立つのは事実です。


しかし、私たちが求める関数型とは、そのようなものではなく、写像と対応、そしてモナド、さらに多くのモナドでした。

fp-tsがその要件に合致し、そのメインテナーも関数型に本気でした。


しかし、数ヶ月前、そのライブラリがEffectにマージされたという知らせを受けました。


そこで、Effectを確認してみたところ、何か違っていました。


従来のfp-tsがライブラリに近いものだったのに対し、今回のEffectはフレームワークに近いものでした。

このEffectを使用するには、Effectに関する基礎知識が必要でした。


NestJsNextJsを使用するには、それらについての理解が必要だったようにです。


ライブラリは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は、RxJsのようにObservableでラップされているのではなく、Effectでラップされたオブジェクトが行き来し、

まるでasync キーワードのように感染を広げていきました。


Effect オブジェクトを使用するには、そのオブジェクトを使用する関数もEffectでなければなりませんでした。


まるで上のコードのprogram のようにです。


もちろん、エントリポイントとして使用される関数はいくつかありますが、それはあまりセクシーではありません。


とにかく、このようなEffectの形態と美しさは、フレームワークとしての役割を果たし、Node界に新たな風と標準を示してくれるのではないかと、筆者は期待しています。


Sunrabbit
Sunrabbit
The way to be a senior is to be a senior.
Sunrabbit
TypeScriptでタイプを手動で1つずつ入力していませんか?TypeScriptの高階型ライブラリを使用して、読みやすい型定義を簡単に作成できます。

2024年8月13日

[React Hook] useStateReact Hook useStateの動作メカニズム、再レンダリングのスコープ、状態値の維持方法を説明し、内部実装方法まで詳しく解説します。

2024年3月14日

[Next.js] ランタイム環境変数の注入Next.jsでビルド後に環境変数を注入する方法を、WindowsおよびUnix環境の両方で動作するように改善する方法について説明します。

2024年3月20日

Flitter vs D3.js:ウェブデータ可視化のゲームチェンジャーD3.jsの代替として台頭するFlitterは、使いやすさとパフォーマンスを向上させ、ウェブデータの可視化をより簡単かつ効率的にします。
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024年7月18日

Flitter 1.0.0 リリース:D3に代わるSVGライブラリFlitter 1.0.0はSVGベースのデータ可視化ライブラリで、Reactとの互換性を強化し、SSRサポートを改善しました。パフォーマンスの向上とバグ修正も含まれています。
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024年5月1日

Java Collections Framework(JCF)とは? - JCFの定義と特徴(JAVA)Java Collections Framework(JCF)は、さまざまなデータを効率的に処理するためのJavaの標準化されたクラスの集合です。
제이온
제이온
제이온
제이온

2024年4月27日

宣言型キャンバス、SVGライブラリをご紹介しますFlutterベースのWeb開発フレームワークFlitterを紹介します。SVGとCanvasレンダリングをサポートし、データ視覚化に特化しています。Web開発にFlutterの強力さを体験してください。
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024年7月10日

[非エンジニア、開発者として生き残る] 14. 新規開発者のよくある技術面接内容要約新規開発者の面接でよく出る技術的な質問(メモリ領域、データ構造、データベースなど)を要約してまとめました。開発面接の準備に役立ててください。
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024年4月3日

[Python]Python基礎1 PythonモジュールについてPython基礎講座として、Pythonモジュールの概念と使用方法を学び、実際にモジュールを作成して使用する手順を理解することができます。
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024年3月27日