イミュータブルな世界で引数と戻り値以外のものを副作用と呼びますが IO処理は副作用がメインなので副作用(サイドエフェクト)と呼ばずにエフェクト(作用)と呼ぶ流派があり、その作用をうまく扱うための一つとしてeffがあります。 そもそもeffとは? - Scalaのランタイムの中でFutureや非同期処理があり、その中で制御することを楽にする。 - 全てスタックに入れて最後に実行する楽にするものシュッとかける。 - そもそも非同期ではなくても使える。 - Haskellからきた概念 - Scalaでは副作用を排除したプログラムが良いと言われるが、副作用をどう扱うかという話があり、作用をeffectというようになった。 - このeffectを扱う一つのアイディアがextentive effectという概念。 議論 - 他のものより実行速度が速い? - ライブラリによる。 - Scalaのライブラリは速いとは言えない - 強い関数型のライブラリ メリット - 書きやすい、合成しやすい - モナドトランスフォーマーや、フリーモナドの発展系 - 型パズルが面倒なのでスタックに積んでいる - for式の右辺に別の型のものが入れられる。同じfor式の中で合成できる。 このメリットそのものはCats Effect, Monix, Zioでも得られる。 それぞれ文脈が違う。 ZioはZioだけ考えれば表現できるのでZioだけ考えれば良い。 Effの概念では、そもそもEffectを組み合わせて表現できるように仕様。 Effは非同期を実現するものではないので、Monixなど非同期を用意して使っている。 Effではインタープリターを書く必要がある。DSLとDSLを実行したいインタプリタで分けると、テストが書きやすい?
スポンサーリンク
rpscalaさんになんでも質問しよう!
質問
スタンプ
利用できるスタンプはありません。
スポンサーリンク
過去に答えた質問
スポンサーリンク