generated at
local reasoning

dependency injectionの特性の一つ
関数の外部依存は全て引数で受け取るスタイル
参照透過性を持たせるのでテスト容易性が高くなる
関数型プログラミングだと自然にこのような形になるはず
ts
const data = { count: 0 } // 引数を使わず、コンテキスト外の値に依存している。dataの状態や文脈に依存するので扱いづらい const increment = () => { data.count++ } --- // 引数にのみ依存させることでdataの構築方法を分離できる // tsではオプショナルパラメータで実現できる const increment = (data = data) => { return { ...data, count: data.count + 1 } }

>DIの目的で、依存オブジェクトを後で入れ替えられるんです、というのを主においてしまうと、実際には大半のオブジェクトは入れ替える必要はないので、ピンとこなくなってしまうのではないかな。DIで本当に重要なのは、local reasoningだと思ってます。
>関数型言語がDIがあまり話題にならないのは、そもそも関数型のスタイルによってlocal reasoningが確保されるからだと思います。参照透明な関数であれば、処理が依存するものは全て引数(と型)で表現されるので、広い意味では特に意識はせずとも引数でDIしていると捉えられる。
>DIでのlocal reasoningの意義はtaroleoさんのairframe-diの記事だと「何を効果的に忘れられるか」と表現されてますね。これもすごくいい記事です。