Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2020-11-05-side-effects-composition__1_.pdf
Search
Nkowne63
November 05, 2020
1
340
2020-11-05-side-effects-composition__1_.pdf
Nkowne63
November 05, 2020
Tweet
Share
More Decks by Nkowne63
See All by Nkowne63
vueで中規模以上のフロントエンドを組んでいて 役に立ったtips
neutron63zf
5
2.9k
20200128_nkowne63
neutron63zf
0
28
Vueで「見た目」「振る舞い」を分離してみよう
neutron63zf
0
460
20190523_nkowne63zf_1.pdf
neutron63zf
0
370
「つなぎこみ」を自動化する
neutron63zf
0
440
for文禁止縛り in JS
neutron63zf
0
620
Featured
See All Featured
Unsuck your backbone
ammeep
661
56k
BBQ
matthewcrist
78
8.7k
The World Runs on Bad Software
bkeepers
PRO
60
6.6k
Debugging Ruby Performance
tmm1
68
11k
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
Producing Creativity
orderedlist
PRO
335
39k
Building Applications with DynamoDB
mza
88
5.6k
How GitHub Uses GitHub to Build GitHub
holman
467
290k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Happy Clients
brianwarren
91
6.3k
Robots, Beer and Maslow
schacon
PRO
154
7.9k
The Invisible Side of Design
smashingmag
293
49k
Transcript
Reduxに依存しない 副作用の合成
背景
背景 • Mobx、Recoilなどの、Reduxに代わりうる状態管理ライブラリが普及してきた • 一方で、Redux-Sagaのような複雑な副作用合成システムを使いたければ、 Reduxしか選択することが (実質)できない • Redux-Sagaとは違う、「状態管理システムとは独立した副作用合成システム 」が必要
関数合成による 副作用の合成 https://github.com/neutron63zf/weakref-function-composer-sample
シンプルな合成 APIはinject/wrappedの2つのみ 副作用を合成したい関数と同じ型の値を返す関数を 受け取り、副作用を実行する関数 (g1, g2) injectは第一引数の関数に副作用を結びつける wrappedは副作用が結びついた関数を返す
多段合成 wrappedは実行された時点での合成された関数を返 すので、 右のように記述すれば副作用の関数の中でさらに 別の副作用を呼び出す事もできる。
特徴と課題
特徴(Pros) • 小さい(40行程度) • 関数に副作用となる関数をラップしていくだけの直感的な動作(シンプル) • 型フレンドリーである • 使う側が「副作用を発生させるかどうか」を制御可能 •
副作用をRedux-Sagaのように仮想的な別プロセスで回すのではなく、関数の合成をしているだけなの で、「次の行に移ったときには副作用の実行は終わっている 」(実行タイミングがわかりやすい)
課題(Cons) • Redux-Sagaほど表現力は高くない(yieldによるチャンネルの合成など) ◦ 書けない事もないが結局 Redux-Sagaの再実装になってしまう • コールスタックを消費するので、無限ループができない ◦ trampolineなどのテクニックを使う事で回避可能
まとめ
まとめ • Reduxに依存しない副作用の合成の仕方が求められている • シンプルな関数合成で副作用を合成するというやり方がある • 一定の課題はあるものの、特定の局面では力を発揮するかもしれない