6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

レキシカルとは

Last updated at Posted at 2019-08-15

レキシカル

私はいつも「字面(じづら)の」と説明しています。
ソースを一通り見た範囲で決定できるのがレキシカルです。

実際に実行時にどこから呼ばれるか、どんなオブジェクトにぶら下がるかはダイナミックな問題です。
以下pediaの解説にある擬似コードの例です。

A {
    var x;
}

B {
    var x; // A内のxとは別物
    var f;

    C {
        var y; // Cの内側からしか見えない
        y = rand();
        f = function(z) { return y + z; };
    }
    x = f(42);
}

この場合 C::y が外から見えないとする言語では、その範囲(いわゆるスコープ)をソースで確定可能です。
ソースで確定できるならレキシカルです。

一方、C::y が外からも見えるような言語では、誰が見るのか実行時でないとわかりません。という事は C::y のスコープは、それを見ようとしているナニかが C::y を外に見せるか、隠すかによって決まります。
実行時に決まるのでダイナミックです。


「レキシカルスコープ」で検索する機会があったんですが、みなさん色々混乱してらっしゃるようです。
特定のプログラミング言語のレキシカルスコープとダイナミックスコープの違いから類推する記事が多いです。
結果を見て機能を推測するのは、「だって実際に動いてるし」につながるのでとても危険です。やめましょう。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?