本文へスキップ

継続渡しスタイルとは?

けいぞくわたしすたいる

継続渡しスタイルとは、プログラムの処理の続きを関数として引数に渡すことで制御フローを明示的に表現するプログラミングスタイルのことです。

継続渡しスタイル(CPS:Continuation-Passing Style)は、関数が処理結果を直接返すのではなく、「次に何をするか」を表す関数(継続)を引数として受け取り、その継続を呼び出すことで処理を進めるプログラミングタイルです。

通常の関数呼び出しでは、関数は値を呼び出し元に返します。一方CPSでは、関数は「結果を受け取って次の処理を行う関数」を引数として受け取り、処理結果をその継続関数に渡します。これにより、プログラムの制御フローが明示的なデータとして扱えるようになります。

CPSの主な利点と用途は以下の通りです。

  • 末尾呼び出し最適化:すべての呼び出しが末尾呼び出しになるため、スタックオーバーフローを避けやすくなります。
  • 非同期処理の表現:JavaScriptのコールバックパターンはCPSの一形態です。
  • コンパイラの中間表現:多くのコンパイラがCPSを内部の中間表現として利用します。
  • 例外・バックトラックの実装:複数の継続を使い分けることで、例外処理や探索アルゴリズムを自然に表現できます。

CPSはコードの可読性を下げる面もあるため、実際の開発ではAsync/Awaitやモナドなどの抽象化によってCPSの恩恵を受けながら直接記述を避ける手法が多く用いられています。

使い方・例文

JavaScriptで非同期処理をコールバック関数で記述するパターンや、関数型言語の学習で制御フローを学ぶ際に登場します。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語