動的スコープ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
動的スコープ、ダイナミックスコープ(英語: dynamic scope)とは、プログラミング言語におけるスコープの一種。
動的スコープは、静的スコープ(構文構造のみから決定できるスコープ)に加え、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープである。このとき参照されるのは、親子関係を親側に辿り、より近いブロックにある変数である。以下の疑似コードでは:
funcA() {
var x;
}
funcB() {
var x,y;
funcA();
}
funcC() {
var x,z;
funcA();
}
funcB内で見えるのは自己ブロック内のx、yである。funcC内で見えるのは自己ブロック内のx、zである。funcAをfuncBから呼び出したときは自己ブロック内のxとfuncB内のyである。funcAをfuncCから呼び出したときは自己ブロック内のxとfuncC内のzである。
このときfuncA内で変数zを利用していて、funcB(または他のzの見えない関数)から呼び出したときはエラーとなる。
動的スコープの代表的な言語は古典LISPやEmacs Lisp、LOGO、Perlのlocal変数など。 動的スコープは強力な反面、ミスを招きやすいため使用に注意が必要である。