ようこそ。睡眠不足なプログラマのチラ裏です。

名前空間は大事だよ

プログラミングをするにあたって、名前付けというのは非常に重要です。

変数に名前をつけます。
定数に名前をつけます。
値に名前をつけます。
属性に名前をつけます。
データ構造に名前をつけます。
データの概念に名前をつけます。
メッセージに名前をつけます。
手続きに名前をつけます。
イベントに名前をつけます。
関数に名前をつけます。
関数のまとまりに名前をつけます。
オブジェクトに名前をつけます。
パターンに名前をつけます。

プログラミングするということは、名前を付けることである。
と言ってしまっても過言ではないかもしれません。*1



例えば、下記のような文章があります。

彼は林檎が好きです。

この文章を読んだとき、一般的解釈がなされた場合、
この「林檎」とは多くの場合、果物の林檎です。


この文章の「林檎」が、仮に「デスノート」に所属する林檎である場合、
この林檎は、一般的解釈と同じように、果物として扱われるでしょう。
この文章の「林檎」が、仮に「東京事変」に所属する林檎である場合、
この林檎は、椎名林檎として扱われるでしょう。*2


このように同じ名前が別の領域では違うモノをあらわしうるとき、
その名前が通用する範囲を「名前空間」(namespace)と呼びます。


プログラミングにおいて、同一の名前空間内に同名のものが
二つ以上存在することは、ほとんどの場合許されません。
なぜなら、どちらのこと指し示しているのかが不明確となってしまうからです。
つまり、プログラミングにおける同一名前空間上においての名前というものは、
同一性(アイデンティティ)を意味します。


プログラムが大規模な場合や、別のスコープから使用される場合、
あるいは別のスコープの何かを使用する場合など、その名前が
どの名前空間に属するのかということを、常に意識していくことが、
正しくプログラミングをする上では極めて重要となります。

*1:明らかに過言です常識的に考えて。

*2:これは良いメタファではないですね。認識しています。