動的スコープ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内, 検索

動的スコープダイナミックスコープ英語: dynamic scope)とは、プログラミング言語におけるスコープの一種。

動的スコープは、静的スコープ(構文構造のみから決定できるスコープ)に加え、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープである。このとき参照されるのは、親子関係を親側に辿り、より近いブロックにある変数である。以下の疑似コードでは:

funcA() {
  var x;
}

funcB() {
  var x,y;
  funcA();
}

funcC() {
  var x,z;
  funcA();
}
  • funcB内で見えるのは自己ブロック内のxyである。
  • funcC内で見えるのは自己ブロック内のxzである。
  • funcAfuncBから呼び出したときは自己ブロック内のxfuncB内のyである。
  • funcAfuncCから呼び出したときは自己ブロック内のxfuncC内のzである。

このときfuncA内で変数zを利用していて、funcB(または他のzの見えない関数)から呼び出したときはエラーとなる。

動的スコープの代表的な言語は古典LISPEmacs LispLOGOPerlのlocal変数など。 動的スコープは強力な反面、ミスを招きやすいため使用に注意が必要である。

個人用ツール
名前空間
変種
操作
案内
ヘルプ
ツールボックス
他の言語