Именскиот простор (англ. namespace) — апстрактен содржател или околина направена да држи логичко групирање на единствени идентификатори или симболи (на пример имиња). Идентификаторот дефиниран во именскиот простор е поврзан со тој именски простор. Истиот идентификатор може да биде независно дефиниран во повеќе именски простори. Тоа е поврзано со идентификатор дефиниран во еден именски простор и може но и немора да го имаат истото значење како и истиот идентификатор дефиниран во друг именски простор. Јазиците кои го поддржуваат именскиот простор одредуваат правила со кои се одредува кој идентификатор на кој именски простор припаѓа.

Во големи компјутерски програми или документи не е необично да имаат стотина или илјада идентификатори. Именските простори пружат механизам за прикривање на локалните идентификатори. Тие овозможуваат групирање на логички сродни идентификатори во одговарачки именски простори, со што го прават системот помодуларен.

Компјутерските уреди за складирање и многу модерни компјутерски јазици овозможуваат поддршка за именски простор. Уредите за складирање користат користат директории (или папки) како именски простор. Ова овозможува два податотеки со исто име да бидат зачувани на уредот толку долго колку тие ќе бидат зачувни во различни директории. Во некои програмски јазици (на пр. C++, Python), идентификаторите именовани во именски простор сами се поврзуваат со приложените именски простори. Значи, во овие јазици именскиот простор може да се вгнезди, формирајќи именски простор дрво. На коренот на ова дрво е неименуван глобален именски простор. ,

Употреба во заеднички јазици

уреди

Во C++, именскиот простор е дефиниран со именски простор - блок.

namespace abc {
  int bar;
}

Во овај блок идентификаторите можат да користат онака како што се објавени. Надвор од тој блок е именскиот простор и назначувачот мора да биде со претставка. На пример, надвор од именскиот простор abc, bar мора да биди напишана abc::bar за да биди пристапенo. C++ вклучува уште еден конструктор кој го причинува овај излив на зборови непотребно. Со додавање на линијата

using namespace abc;

на дел од кодот, претставката abc:: не е потребен повеќе. Кодот кој не е јасно деклариран со именски простор се смета за глобален именски простор. Именски простор резолуцијата во C и C++ е хиреархиски подредена. Тоа значи дека внатре во хипотетички именскиот простор храна: пилешко, супа идентивикаторот се однесува на храна: супа:: пилешка ако постои. Ако тоа не постои , тогаш се однесува на храна:: пилешко ако постои. Ако не постои, пилешкото се однесува и на идентификатор во глобален именски простор. Именскиот простор во C++ најчесто се користи за да се избегнат судири од имиња. Иако именскиот простор се користи значително во новиот C++ код, но кај постариот код не се користи овај објект. На пример, целата C++ Стандардна Библиотека е дефинирана во namespace std, но пред многу стандардизација на компонентите се изворно во глобален именски простор. Во Java програмскиот јазик, идејата за именски простор e отелотворена во Java пакетот. Сите кодови припаѓаат на пакетот, иако тој пакет не треба да биди јасно именуван. Кодот од другите пакети е пристапен со претставкирање на името на пакетот пред погодниот иденитфикатор. На прмер: Стринг класата во пакетот java.lang може да биди позната java.lang.String ( ова е познато како потполно погодно име на класата). Како и C++, Java нуди градење кое прави да е непотребно пишувањето на името на пакетот (внесување) . Меѓутоа одредени белези бараат од програмерот за користење на целосно квалифициран израз.

XML именски простор

уреди

Во XML, XML namespace овозможува имињата на елементите и атрибутите во XML документ да бидат единствени, слично како и именскиот простор во програмските јазици. Користејќи XML именски простор, XML документите можат да содржат елементи или атрибути на имиња од повеќе од еден XML речник.

Имитација на Именскиот простор

уреди

Во програмските јазици кои не пружат поддршка за именски простор, именскиот простор може да биде имитиран од одреден идентификатор. На пример, C Библиотеката како и Libpng често користат фиксирани претставки за сите функции и променливи што се дел од нивните изложени функции. Libpng изложува идентификатори, како што се:

png_create_write_struct
png_get_signature
png_read_row
png_set_invalid

Тоа овозможува разумно уверување дека идентификаторите се единствени и можат да се користат во поголеми програми без страв од судир на имината на идентификаторите. За жал, оваа техника има неколку недостатоци:

  • Поединци или организации може да користат драматично недоследно именување
  • Сложените и испитувачките операции на идентификаторските групи, засновани на именски простор во кој се извршуваат, донесуваат непрактичност.