【シーピーエス、けいぞくわたしスタイル】
CPS(継続渡しスタイル) とは?
最終更新:
💡 答えと一緒に、次の担当へバトンを渡す
関数の計算結果を呼び出し元へ直接返す代わりに、引数として受け取った「続きの処理」の関数へ渡す書き方。処理をどう続けるかを、継続という形で明示する。
CPSって、何の略?
Continuation-Passing Styleで、継続渡しスタイルと呼ぶよ。継続は、計算の結果を受け取ってその後を進める処理。関数へ、その続きも引数として渡すんだ。
returnとは、どう違う?
例えば通常の形では、1を足した値をreturnで返し、呼び出し元が使うよ。CPSの形なら、addOne(x, k)がk(x + 1)を呼ぶ。ここでkが、答えを受け取る継続なんだ。どちらも計算する値は同じだけれど、続け方の表現が違うね。
コールバックなら、全部CPS?
必ず、非同期になるの?
ならないよ。今のaddOneの例は、その場でkを呼ぶ同期処理として書ける。非同期処理にも使えるけれど、継続を渡すことと、別のタイミングで実行することは分けて考えよう。async/awaitの実装が必ず同じCPS変換、という意味でもないんだ。
コンパイラでは、何に使う?
まとめ:ざっくりこれだけ覚えればOK!
「CPS」って出てきたら「結果を返す代わりに、受け取った続きの処理へ渡す書き方」と思えばだいたいOK!
📖 おまけ:英語の意味
「CPS (Continuation-Passing Style)」 = 継続渡しスタイル
💬 "Continuation"は「次にすること」の意。関数が完了後に何をするかを引数で渡すスタイルだよ。