Простір назв

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

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

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

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

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

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

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

  1. Дудзяний, І. М. (2006). Програмування мовою Visual Basic .NET. Львів: Видавничий центр ЛНУ імені Івана Франка. с. 9, 20. 
  2. Сопронюк, Т. М. (2007). Microsoft Visual Basic та його діалекти. Чернівці: ЧНУ. с. 55–56. 
  3. Парфьонов, Ю. Є.; Федорченко, В. М.; Лосєв, М. Ю.; Щербаков, О. В. (2010). Об'єктно-орієнтоване програмування: конспект лекцій для студентів напряму підготовки "Комп'ютерні науки" всіх форм авчання. Харків: Вид. ХНЕУ. с. 13–14. 
  4. Фурник, Р. В.; Ромадін, Р. В. (2011). Соціальні сервіси Веб 2.0 та основні напрямки їх використання в освіті. Черкаси. с. 19–20, 25. 
  5. Литвин, В. В. (2010). У Пасічник, В. В. Технології менеджменту знань. Консолідована інформація. Львів: Видавництво Львівської політехніки. с. 189, 216. ISBN 978-966-553-975-9. 
  6. Парфьонов, Ю. Є.; Федорченко, В. М.; Лосєв, М. Ю.; Щербаков, О. В. (2010). Об'єктно-орієнтоване програмування: конспект лекцій для студентів напряму підготовки "Комп'ютерні науки" всіх форм авчання. Харків: Вид. ХНЕУ. с. 98–101, 156, 197, 243, 261, 298, 305. 
  7. Грицюк, Юрій; Рак, Тарас (2011). УІБ/Грицюк Ю.І/C++.pdf Програмування мовою C++. Львів: Вид-во ЛДУ БЖД. с. 36. ISBN 978-966-3466-85-9. 
  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.


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