【シーピーエス、けいぞくわたしスタイル】
CPS(継続渡しスタイル) とは?
💡 「次に何をするか」を荷物として一緒に渡す関数の流儀
📌 このページのポイント
CPSって何の略なの?
Continuation-Passing Styleの略で「継続渡しスタイル」だよ。関数が結果を `return` で返す代わりに、「次にこれをして」という関数(継続)を引数で受け取って、そっちに渡すんだ。
普通の `return` と何が違うの?
通常は `f(x)` → `return y` だけど、CPSでは `f(x, k)` → `k(y)` になるよ。`k` が継続で、`y` を受け取って続きの処理をする関数なんだ。
JavaScriptのコールバックってそれに似てるね!
まさに!コールバック地獄は手書きCPSそのものだよ。`async/await` は裏側でCPS変換を自動でやってくれる糖衣構文とも言えるんだ。
コンパイラとも関係あるって聞いたことがあるけど?
全部の制御フローをCPSで書けるなんてすごいね!
理論的には `if` も `for` も `try/catch` もCPSで表現できるよ。自由と引き換えにコードが深くネストしやすいのが難点だけど、それを解決したのが `async/await` や関数型言語のモナドなんだ。
まとめ:ざっくりこれだけ覚えればOK!
「CPS(継続渡しスタイル)」って出てきたら「結果を返さず次の処理を引数で渡す関数スタイル」と思えればだいたいOK!
📖 おまけ:英語の意味
「CPS (Continuation-Passing Style)」 = 継続渡しスタイル
💬 "Continuation"は「次にすること」の意。関数が完了後に何をするかを引数で渡すスタイルだよ。