Простір імен

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Простір імен (англ. namespace) - множина, призначена для локалізації ідентифікаторів, і попередження конфліктів між їх іменами.

В різних мовах програмування[ред.ред. код]

Python[ред.ред. код]

В Python кожен ідентифікатор може знаходитись в локальному або глобальному просторі імен, або всередині певного об'єкта (модуля, або будь-якого іншого). Функція locals() повертає словник (асоціативний масив) з ідентифікаторами локального простору імен[1], globals() - глобального[2]. Функція dir() покаже список імен ідентифікаторів доступних з поточного фрейму, якщо викликана без параметрів, і список ідентифікаторів всередині об'єкта, якщо викликана з якимось об'єктом[3].

Змінна оголошена всередині іншої функції потрапляє в локальний простір імен, якщо перед цим не задекларувати її глобальною використавши ключове слово global[4].

C++[ред.ред. код]

За замовчуванням[en] всі ідентифікатори знаходяться в глобальному просторі імен, тому часті випадки існування двох різних об'єктів з однаковими іменами, що призводить до помилок. Щоб цьому запобігти глобальний простір імен ділять на менші. Наприклад стандартну бібліотеку C++ винесено в область названу std.

Створення просторів імен[ред.ред. код]

Щоб створити простір імен використовують ключове слово namespace. Код:

namespace <назва_простору>
{
   // Оголошення
}

Доступ до ідентифікаторів з просторів імен[ред.ред. код]

Щоб отримати доступ до об'єктів з простору імен з за його меж використовують оператор дозволу області видимості ( :: ). Наприклад:

namespace some
{
    int something;
}
something=1; // Помилка, something невидиме.
some::something=1; // Ми вказали в якій області його шукати.


Правда такий спосіб може бути страшенно незручним, якщо ми використовуємо багато ідентифікаторів не з нашої області видимості. Щоб полегшити нам життя придумана директива using. Хай ми маємо простір кімнати:

namespace room
{
   Wall wall1,wall2,wall3,wall4;
   Ceil ceil;
}

Можна внести стелю в наш іменний простір написавши що ми її будем використовувати:

using room::ceil;
ceil=42; // Тепер стеля видима
wall1=wall2; // А таке все ще викличе помилку!

А можна взагалі розкрити увесь простір імен:

using room;
wall1=wall2=wall3; // Всі ідентифікатори з кімнати доступні

Деякі особливості просторів імен[ред.ред. код]

Можна робити простори імен без назви. Це просто для того щоб зробити локальні змінні невидимими поза областю. Крім того можна описувати кілька просторів імен з одною назвою. Тоді це буде одний, і той же простір, просто рознесений в різні частини файлу, чи взагалі в різні файли.

Неіменований простір імен або простір імен визначений прямо чи непрямо в неіменованому просторі імен має внутрішнє зв'язування (англ. internal linkage).[5]

Див. також[ред.ред. код]

Примітки[ред.ред. код]


Посилання[ред.ред. код]