レキシカルスコープ 【lexical scope】 字句スコープ / 静的スコープ / static scope
概要
レキシカルスコープ(lexical scope)とは、プログラム中の変数などの有効範囲(スコープ)の決定方式の一つで、ソースコードにおけるブロックなどの包含関係からスコープを決定するもの。多くのプログラミング言語で採用されている。プログラム中で宣言した定数や変数などのシンボルがコード中で参照できる範囲のことを「スコープ」(scope)という。例えば、多くの言語では関数の中で宣言された変数はその関数の中からしか参照できず(ローカルスコープ)、他の箇所で値の参照や代入を行おうとするとエラーになる。
レキシカルスコープはブロックや関数などが入れ子状に定義されているとき、ソースコードの字句の並びに基づいてスコープを決定する方式で、プログラムの解析時に静的にスコープが定まる。この場合、例えば関数の中で他の関数を定義した場合、親関数(外側の関数)の中で定義した変数などを子関数(内側の関数)から参照することができる。
一方、実行時に関数などの呼び出し側、呼び出され側という関係性に基づいて動的にスコープを決定する方式を「動的スコープ」「ダイナミックスコープ」(dynamic scope)という。この場合、ある関数が別の関数を呼び出した際、呼び出された側から呼び出した側で定義された変数などを参照することができる。LISPなどで採用されている。
(2023.11.13更新)