Простір назв
Про́стір назв[1][2][3][4], також про́стір іме́н[5][6][7] або іменни́й про́стір[джерело?] (англ. namespace) — концепція у програмуванні, призначена для розмежування різних множин ідентифікаторів і уникнення конфліктів між їхніми назвами.
В різних мовах програмування
Python
В Python кожен ідентифікатор може знаходитись в локальному або глобальному просторі назв, або всередині певного об'єкта (модуля, або будь-якого іншого). Функція locals()
повертає словник (асоціативний масив) з ідентифікаторами локального простору назв[8], globals()
— глобального[9]. Функція dir()
покаже список ідентифікаторів доступних з поточного фрейму, якщо викликана без параметрів, і список ідентифікаторів всередині об'єкта, якщо викликана з якимось об'єктом[10].
Змінна оголошена всередині іншої функції потрапляє в локальний простір назв, якщо перед цим не задекларувати її глобальною використавши ключове слово global
[11].
C++
За замовчуванням всі ідентифікатори знаходяться в глобальному просторі назв, тому часті випадки існування двох різних об'єктів з однаковими назвами, що призводить до помилок. Щоб цьому запобігти глобальний простір назв ділять на менші. Наприклад стандартну бібліотеку 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; // Всі ідентифікатори з кімнати доступні
Деякі особливості просторів назв
Можна робити простори назв без назви. Це просто для того, щоб зробити локальні змінні невидимими поза областю. Крім того можна описувати кілька просторів назв з одною назвою. Тоді це буде один, і той же простір, просто рознесений в різні частини файлу, чи взагалі в різні файли.
Неназваний простір назв або простір назв визначений прямо чи непрямо в неназваному просторі назв3 має внутрішнє зв'язування (англ. internal linkage).[12]
Див. також
- Довідка:Простір назв
Примітки
- Дудзяний, І. М. (2006). Програмування мовою Visual Basic .NET. Львів: Видавничий центр ЛНУ імені Івана Франка. с. 9, 20.
- Сопронюк, Т. М. (2007). Microsoft Visual Basic та його діалекти. Чернівці: ЧНУ. с. 55–56.
- Парфьонов, Ю. Є.; Федорченко, В. М.; Лосєв, М. Ю.; Щербаков, О. В. (2010). Об'єктно-орієнтоване програмування: конспект лекцій для студентів напряму підготовки "Комп'ютерні науки" всіх форм авчання. Харків: Вид. ХНЕУ. с. 13–14.
- Фурник, Р. В.; Ромадін, Р. В. (2011). Соціальні сервіси Веб 2.0 та основні напрямки їх використання в освіті. Черкаси. с. 19–20, 25.
- Литвин, В. В. (2010). У Пасічник, В. В. Технології менеджменту знань. Консолідована інформація. Львів: Видавництво Львівської політехніки. с. 189, 216. ISBN 978-966-553-975-9.
- Парфьонов, Ю. Є.; Федорченко, В. М.; Лосєв, М. Ю.; Щербаков, О. В. (2010). Об'єктно-орієнтоване програмування: конспект лекцій для студентів напряму підготовки "Комп'ютерні науки" всіх форм авчання. Харків: Вид. ХНЕУ. с. 98–101, 156, 197, 243, 261, 298, 305.
- Грицюк, Юрій; Рак, Тарас (2011). УІБ/Грицюк Ю.І/C++.pdf Програмування мовою C++. Львів: Вид-во ЛДУ БЖД. с. 36. ISBN 978-966-3466-85-9.[недоступне посилання з липня 2019]
- Python Built-in Functions — locals()
- Python Built-in Functions — globals()
- Python Built-in Functions — dir()
- Python Language Reference — 7. Simple statements — The global statement
- ISO/IEC 14882:2011, 3.5 Program and linkage.