名前空間
読み:なまえくうかん
外語:namespace
名前の集合を複数に分割することで、互いの衝突を避ける仕組み。
概要
名前は、英数記号文字等を組み合わせて得られる。これによって表現できる、組み合わせ可能な全ての範囲を空間といい、これが名前であるため名前空間という。
プログラミング言語やマークアップ言語等では、名前によって各々を区別する。従って原則として重複が許されない。しかし、巨大なプログラムを作ろうとすると、名前衝突が深刻な問題となる。
そこでこのような時には名前を階層化し、集合を複数に分けることで解決する。このような場合の、それぞれで表現できる範囲を名前空間と呼ぶことができる。
特徴
プログラミング言語
ここでは、C++/Java風の架空プログラムによって説明を行なう。
例えば、次のようなコードを想定する。
void hoge() {};
void hoge() {};
void main() {
hoge();
}
この場合は、同じhogeが複数存在するため、どちらを用いればよいのか判断することが出来ない。複数人数で処理を書いている場合に、このようなことが発生しやすい。
そこで例えば、開発グループごとに、grp?_という名前を付けるものとして取り決めたとする。
void grpA_hoge() {};
void grpB_hoge() {};
void main() {
grpA_hoge();
grpB_hoge();
}
これによって呼び出すべきものが一意に定まるため、衝突は回避される。しかし、この方法では名前が長くなりがちで不便であり、プログラムの見通しも悪くなる。
そこで、それぞれの関数を別の名前空間に入れることで解決を図る。
namespace grpA {
void hoge() {};
};
namespace grpB {
void hoge() {};
};
void main() {
grpA::hoge();
grpB::hoge();
}
名前空間を変えておけば、わざわざ名前に特殊な加工をする必要がなくなる。
この例では、grpA内のプログラムから名前空間grpAの関数を呼ぶ場合も逐一grpAを書く必要が生じるが、これも現在の標準的な名前空間を別途指定することで、名前空間の名前を略することも出来る。
using grpA;
void main() {
hoge();
}
この場合は、hogeだけであっても、grpA::hogeが参照されることになる。
名前空間を分離した場合でも、していない時と何ら変わらないように処理を書くことが可能である。
再検索