動的スコープ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
動的スコープ、ダイナミックスコープ(テンプレート:Lang-en)とは、プログラミング言語におけるスコープの一種である。
動的スコープは、静的スコープ(構文構造のみから決定できるスコープ)に加え、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープである。このとき参照されるのは、親子関係を親側に辿り、より近いブロックにある変数である。以下の疑似コードでは:
A { print x } B { var x call A // Aの中からxを参照することができる } C { var y call A // Aの中からxを参照することはできない }
ブロックB
から呼び出されたブロックA
は、ブロックB
で定義されている変数x
を参照できる。一方、ブロックC
から呼び出されたブロックA
は、ブロックB
で定義されている変数x
は参照できない。
動的スコープは強力な反面、ミスを招きやすいため使用に注意が必要である。例えば以下の疑似コードでは呼び出し元ブロックによって変数の値が変化することを示している。
var x = 123 A { var x = 456 call C // 456と出力される } B { call C // 123と出力される } C { print x // 呼び出し元によって x の値が変わる }
動的スコープを採用している代表的な言語としては古典LISPやEmacs Lisp、LOGO、Perl4などがある。
参考文献
- 西尾泰和『コーディングを支える技術 ~成り立ちから学ぶプログラミング作法』