Простір назв

контейнер множини ідентифікаторів

Про́стір назв[1][2][3][4], також про́стір іме́н[5][6][7] або іменни́й про́стір[джерело?] (англ. namespace) — концепція у програмуванні, призначена для розмежування різних множин ідентифікаторів і уникнення конфліктів між їхніми назвами.

В різних мовах програмування Редагувати

Python Редагувати

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

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

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; // Всі ідентифікатори з кімнати доступні

Деякі особливості просторів назв Редагувати

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

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

Див. також Редагувати

Примітки Редагувати

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

Посилання Редагувати