Простір назв

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

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

Посилання