acquireReleaseとacquireUseRelease
Effect.acquireReleaseとEffect.acquireUseRelease
GPT-4.icon
ざっくりとした使い分け
table:_
比較軸 acquireUseRelease acquireRelease(+ scoped)
主な用途 単発で完結する処理(スコープ不要) スコープを跨いでリソースを扱いたいとき
ユースケース 一時的に使ってすぐ解放(例:ログ出力) 長く使うリソース(例:DB接続、ファイル操作)
明示的なuse処理 必須(use を渡す) 不要(呼び出し側で yield* resource)
スコープ管理 内部で完結 Effect.scoped でスコープを明示的に閉じる
柔軟性 やや低い(ワンショット) 高い(複数のリソースをスコープ内で扱える)
例で見る違い
acquireUseRelease:
code:ts
Effect.acquireUseRelease(
acquireDB,
(db) => db.query("SELECT * FROM users"),
releaseDB
)
一発しかuseできない
acquireRelease:
code:ts
const dbResource = Effect.acquireRelease(acquireDB, releaseDB)
const program = Effect.scoped(
Effect.gen(function* () {
const db = yield* dbResource
yield* db.query("SELECT * FROM users")
yield* db.query("SELECT * FROM orders")
})
)