Optics
#型
#関数型プログラミング
#デザインパターン
複数の
データ構造
を横断する処理を、Opticsを通したget, setで
カプセル化
する
外部から観測可能(public)
な振る舞い
ユースケース
ReadModel
WriteModel
メリット
サブタイピング
や
変性
のような特徴を持っていても型安全にしやすい
SLAP原則
に則って
カプセル化
しやすい
trait
的な挙動も表現しやすい
インタフェースを変更せずにセマンティクスを変更する
共有依存を扱う際のDIやlocal reasoningは、依存の主体定義を親ではなく末端に閉じさせることで疎結合にする & 後方互換性を維持する
コンポーサブル
であり、
Immutable Model
で表現できる
説明に出てくるlens, prismは
メタファー
っぽい
尋ねるな、命じろ (Tell, Don't Ask)
なにかしたければ難しいこと考えずにこのレンズを通して命令しろ、みたいな
宣言型プログラミング
っぽい感じ
---
Introduction to optics: lenses and prisms
A (Very Short) Intro to Optics
Haskell/Lenses and functional reference
---
実装例
Lenses And Prisms
#Rust
Functional references: Lens and other Optics in Scala by Alo Davì
#Scala
https://python-lenses.readthedocs.io/en/latest/tutorial/optics.html
#Python
(Type|ECMA|Java)Script
のライブラリ
https://github.com/akheron/optics-ts
---
Atomic State Management
の源流になってるという話をどっかで聞いた
jotai-optics
なんてのもある