【えふぇくとしすてむ】
エフェクトシステム とは?
💡 関数が「何をやらかすか」を型に書いて、コンパイラに監視させる仕組み
📌 このページのポイント
エフェクトシステムって、ゲームのエフェクトとは関係ないんだよね?
全然違うよ!ここでの「エフェクト」は「副作用」のことで、関数がI/Oしたり、例外を投げたり、状態を変えたりすることを指すんだよ
副作用って悪いものなの?
なくすのは難しいんだけど、「どこで何の副作用が起きるか」がわからないとバグが増えるんだよ。エフェクトシステムはそれを型で明示する仕組みなんだ
型に書くってどういうことなの?
たとえば `readFile : String -> IO String` のように関数の型に `IO` というエフェクトラベルをつけるんだよ。これを見ただけで「この関数はI/Oをする」とわかるんだ
それって呼び出した関数にも広がるの?
エフェクトハンドラーって何なの?
エフェクトの「実装」を外側から差し込む仕組みだよ。本番では実際のI/Oを、テストではモックを使うという切り替えがエレガントにできるんだよ
どんな言語で使えるの?
ScalaのZIO、KokaというMicrosoft Research製の言語、最近ではOCaml 5でも使えるようになったんだよ。関数型プログラミングとの相性がいいんだ
📖 おまけ:英語の意味
「Effect System」 = 効果システム / 副作用システム
💬 ここでの「Effect(エフェクト)」は「副作用」の意味だよ。「型システム(Type System)」の概念を拡張して、副作用を型として扱えるようにしたものだよ