नेमस्पेस: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 315: Line 315:
===== पीएचपी =====
===== पीएचपी =====
नेमस्पेस को संस्करण 5.3 के बाद से [[Php]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
नेमस्पेस को संस्करण 5.3 के बाद से [[Php]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
[[PHP]] में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।
[[PHP]] में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।<syntaxhighlight lang="d">
<वाक्यविन्यास लैंग = php>
# File phpstar/foobar.php
# फ़ाइल phpstar/foobar.php


नेमस्पेस phpstar;
namespace phpstar;


वर्ग फूबार
class FooBar
{
{
     सार्वजनिक समारोह फू (): शून्य
     public function foo(): void
     {
     {
         इको 'हैलो वर्ल्ड, फंक्शन फू से';
         echo 'Hello world, from function foo';
     }
     }


     सार्वजनिक फ़ंक्शन बार (): शून्य
     public function bar(): void
     {
     {
         इको 'हैलो वर्ल्ड, फंक्शन बार से';
         echo 'Hello world, from function bar';
     }
     }
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>हम निम्नलिखित विभिन्न तरीकों से PHP नेमस्पेस का संदर्भ दे सकते हैं:<syntaxhighlight lang="d">
हम निम्नलिखित विभिन्न तरीकों से PHP नेमस्पेस का संदर्भ दे सकते हैं:
# File index.php
<वाक्यविन्यास लैंग = php>
# फ़ाइल index.php


# फ़ाइल शामिल करें
# Include the file
phpstar/foobar.php शामिल करें;
include "phpstar/foobar.php";


# विकल्प 1: सीधे नाम स्थान के साथ वर्ग का नाम उपसर्ग करें
# Option 1: directly prefix the class name with the namespace
$obj_foobar = नया \phpstar\FooBar();
$obj_foobar = new \phpstar\FooBar();


# विकल्प 2: नामस्थान आयात करें
# Option 2: import the namespace
phpstar \ FooBar का प्रयोग करें;
use phpstar\FooBar;
$obj_foobar = नया FooBar();
$obj_foobar = new FooBar();


# विकल्प 2a: नामस्थान को आयात और उपनाम करें
# Option 2a: import & alias the namespace
एफबी के रूप में phpstar \ FooBar का उपयोग करें;
use phpstar\FooBar as FB;
$obj_foobar = नया एफबी ();
$obj_foobar = new FB();


# गुणों और विधियों को नियमित रूप से एक्सेस करें
# Access the properties and methods with regular way
$obj_foobar->foo();
$obj_foobar->foo();
$obj_foobar->बार();
$obj_foobar->bar();
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


===नामस्थानों का अनुकरण ===
===नामस्थानों का अनुकरण ===
नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, [[पहचानकर्ता नामकरण सम्मेलन]] का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि [[libpng]] अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:
नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, [[पहचानकर्ता नामकरण सम्मेलन]] का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि [[libpng]] अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:<syntaxhighlight lang="d">
 
png_create_write_struct
png_create_write_struct
png_get_signature
png_get_signature
png_read_row
png_read_row
png_set_invalid
png_set_अमान्य
</syntaxhighlight>यह नामकरण प्रथा (प्रोग्रामिंग) उचित आश्वासन प्रदान करती है कि पहचानकर्ता अद्वितीय हैं और इसलिए बड़े कार्यक्रमों में टकराव के नामकरण के बिना उपयोग किया जा सकता है।<ref>{{Cite web|url=http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=286 |title=Why I Hate Namespaces |author=Danny Kalev |url-status=bot: unknown |archive-url=https://web.archive.org/web/20160709115609/http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=286 |archive-date=2016-07-09 }}</ref> इसी तरह, मूल रूप से [[फोरट्रान]] (जैसे, [[BLAS]], [[LAPACK]]) में लिखे गए कई पैकेज किसी फ़ंक्शन के नाम के पहले कुछ अक्षरों को यह इंगित करने के लिए आरक्षित करते हैं कि यह किस समूह से संबंधित है।
 
यह नामकरण प्रथा (प्रोग्रामिंग) उचित आश्वासन प्रदान करती है कि पहचानकर्ता अद्वितीय हैं और इसलिए बड़े कार्यक्रमों में टकराव के नामकरण के बिना उपयोग किया जा सकता है।<ref>{{Cite web|url=http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=286 |title=Why I Hate Namespaces |author=Danny Kalev |url-status=bot: unknown |archive-url=https://web.archive.org/web/20160709115609/http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=286 |archive-date=2016-07-09 }}</ref> इसी तरह, मूल रूप से [[फोरट्रान]] (जैसे, [[BLAS]], [[LAPACK]]) में लिखे गए कई पैकेज किसी फ़ंक्शन के नाम के पहले कुछ अक्षरों को यह इंगित करने के लिए आरक्षित करते हैं कि यह किस समूह से संबंधित है।


इस तकनीक में कई कमियां हैं:
इस तकनीक में कई कमियां हैं:

Revision as of 14:43, 22 February 2023

कम्प्यूटिंग में, नामस्थान संकेतों (नाम) का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नेमस्पेस यह सुनिश्चित करता है कि दिए गए सभी ऑब्जेक्ट्स के सेट में अद्वितीय नाम हों ताकि वे आसानी से पहचानकर्ता बन सकें।

अलग-अलग संदर्भों में नामों के पुन: उपयोग की अनुमति देने के लिए नामस्थानों को आमतौर पर पदानुक्रम के रूप में संरचित किया जाता है। सादृश्य के रूप में, नृविज्ञान की प्रणाली पर विचार करें जहां प्रत्येक व्यक्ति का दिया गया नाम है, साथ ही परिवार का नाम उनके रिश्तेदारों के साथ साझा किया जाता है। यदि परिवार के सदस्यों के पहले नाम केवल प्रत्येक परिवार के भीतर अद्वितीय हैं, तो प्रत्येक व्यक्ति को पहले नाम और परिवार के नाम के संयोजन से विशिष्ट रूप से पहचाना जा सकता है; केवल जेन डो है, हालांकि कई जेन हो सकते हैं। डो परिवार के नाम स्थान के भीतर, सिर्फ जेन इस व्यक्ति को स्पष्ट रूप से नामित करने के लिए पर्याप्त है, जबकि सभी लोगों के वैश्विक नाम स्थान के भीतर, पूरा नाम इस्तेमाल किया जाना चाहिए।

नामस्थानों के प्रमुख उदाहरणों में फाइल सिस्टम शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।[1] कुछ प्रोग्रामिंग भाषा अपने वेरिएबल (कंप्यूटर साइंस) और सबरूटीन्स को नेमस्पेस में व्यवस्थित करती हैं।[2][3][4] संगणक संजाल और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, वेबसाइट और रिमोट फाइल्स। वर्चुअलाइजेशन ओएस-स्तरीय वर्चुअलाइजेशन का समर्थन करने के लिए ऑपरेटिंग सिस्टम पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं।

इसी तरह, डायरेक्टरी (कंप्यूटिंग) फाइलों को डायरेक्टरी में व्यवस्थित करती है। प्रत्येक निर्देशिका अलग नामस्थान है, ताकि निर्देशिका पत्र और चालान दोनों में to_jane फ़ाइल हो सकती है।

कंप्यूटर प्रोग्रामिंग में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं।

नेटवर्किंग में, डोमेन की नामांकन प्रणाली वेबसाइटों (और अन्य संसाधनों) को श्रेणीबद्ध नामस्थानों में व्यवस्थित करता है।

नाम विरोध

तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न XML अनुप्रयोगों से XML दस्तावेज़ों को मिलाने का प्रयास करते समय यह अक्सर विरोध का कारण बनता है।

इस XML में HTML टेबल की जानकारी होती है:

<table>
    <tr>
        <td>Apples</td>
        <td>Oranges</td>
    </tr>
</table>

इस एक्सएमएल में टेबल (फर्नीचर) (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:

<table>
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
</table>

यदि इन XML अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में है ‎<table>...‎</table> तत्व, लेकिन तत्वों की अलग सामग्री और अर्थ है।

XML पार्सर को यह नहीं पता होगा कि इन अंतरों को कैसे हैंडल किया जाए।

उपसर्ग के माध्यम से समाधान

XML में नाम के विरोध को नाम उपसर्ग के प्रयोग से आसानी से टाला जा सकता है।

निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।

<h:table>
    <h:tr>
        <h:td>Apples</h:td>
        <h:td>Oranges</h:td>
    </h:tr>
</h:table>

<f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
</f:table>

नामकरण प्रणाली

नाम स्थान में नाम में नाम स्थान का नाम और स्थानीय नाम होता है।[5][6] नामस्थान नाम आमतौर पर स्थानीय नाम के लिए उपसर्ग (कंप्यूटर विज्ञान) के रूप में लागू किया जाता है।

संवर्धित बैकस-नौर रूप में:

name = <namespace name> separator <local name>

जब स्थानीय नामों का स्वयं उपयोग किया जाता है, तो नाम संकल्प (प्रोग्रामिंग भाषा) का उपयोग यह तय करने के लिए किया जाता है कि कौन सा (यदि कोई है) विशेष नाम किसी विशेष स्थानीय नाम से संकेतित है।

उदाहरण

Examples of names in a namespace
Context Name Namespace name Local name
Path /home/user/readme.txt /home/user (directory) readme.txt (file name)
Domain name www.example.com example.com (domain name) www (leaf domain name)
C++ std::array std (C++ namespace) array (struct)
UN/LOCODE US NYC US (country or territory) NYC (locality)
XML xmlns:xhtml="http://www.w3.org/1999/xhtml"
<xhtml:body>
xhtml (previously declared XML namespace xhtml="http://www.w3.org/1999/xhtml") body (element)
Perl $DBI::errstr $DBI (Perl module) errstr (variable)
Java java.util.Date java.util (Java namespace) Date (class)
Uniform Resource Name (URN) urn:nbn:fi-fe19991055 urn:nbn (National Bibliography Numbers) fi-fe19991055
Handle System 10.1000/182 10 (handle naming authority) 1000/182 (handle local name)
Digital object identifier 10.1000/182 10.1000 (publisher) 182 (publication)
MAC address 01-23-45-67-89-ab 01-23-45 (organizationally unique identifier) 67-89-ab (NIC specific)
PCI ID 1234 abcd 1234 (vendor ID) abcd (device ID)
USB VID/PID 2341 003f[7] 2341 (vendor ID) 003f (product ID)
SPARQL dbr:Sydney dbr (previously declared ontology, e.g. by specifying @prefix dbr: <http://dbpedia.org/resource/>) Sydney


प्रतिनिधिमंडल

पार्टियों के बीच जिम्मेदारियों का प्रतिनिधिमंडल वास्तविक दुनिया के अनुप्रयोगों में महत्वपूर्ण है, जैसे वर्ल्ड वाइड वेब की संरचना। नामस्थान वैश्विक विशिष्टता को बनाए रखते हुए कई नाम जारी करने वाले संगठनों को पहचानकर्ता असाइनमेंट के प्रतिनिधिमंडल की अनुमति देते हैं।[8] केंद्रीय पंजीकरण प्राधिकरण राष्ट्रीय इंटरनेट रजिस्ट्री को पंजीकृत करता है। प्रत्येक नेमस्पेस नाम संगठन को आवंटित किया जाता है जो बाद में उनके आवंटित नेमस्पेस में नामों के असाइनमेंट के लिए जिम्मेदार होता है। यह संगठन नाम जारी करने वाला संगठन हो सकता है जो खुद मेटाडेटा रजिस्ट्री करता है, या कोई अन्य पंजीकरण प्राधिकरण जो अपने नामस्थान के कुछ हिस्सों को अलग-अलग संगठनों को सौंपता है।

पदानुक्रम

नामकरण योजना जो तृतीय पक्षों को नामस्थानों के उप-प्रत्यायोजन की अनुमति देती है, श्रेणीबद्ध नामस्थान है।

पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण डोमेन नाम है।

गैर-पुनरावर्ती पदानुक्रम का उदाहरण समान संसाधन का नाम है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी (IANA) नंबर का प्रतिनिधित्व करता है।

Hierarchical namespace breakdown for urn:isbn:978-3-16-148410-0, an identifier for the book The Logic of Scientific Discovery by Karl Popper, 10th edition.
Registry Registrar Example Identifier Namespace name Namespace
Uniform Resource Name (URN) Internet Assigned Numbers Authority urn:isbn:978-3-16-148410-0 urn Formal URN namespace
Formal URN namespace Internet Assigned Numbers Authority urn:isbn:978-3-16-148410-0 ISBN International Standard Book Numbers as Uniform Resource Names
International Article Number (EAN) GS1 978-3-16-148410-0 978 Bookland
International Standard Book Number (ISBN) International ISBN Agency 3-16-148410-X 3 German-speaking countries
German publisher code Agentur für Buchmarktstandards 3-16-148410-X 16 Mohr Siebeck


नेमस्पेस बनाम स्कोप

नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास।

Examples of naming systems with local and global scope, and with and without namespaces
Without a namespace With a namespace
Local scope Vehicle registration plate Filesystem Hierarchy Standard
Global scope Universally unique identifier Domain Name System


प्रोग्रामिंग भाषाओं में

कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, नेमस्पेस का उदाहरण डायरेक्टरी है। निर्देशिका में प्रत्येक नाम विशिष्ट रूप से फ़ाइल या उपनिर्देशिका की पहचान करता है।[9] नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को संदर्भ (कंप्यूटिंग) भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है।

नामस्थान की अन्य विशेषताएँ निम्नलिखित हैं:

  • नेमस्पेस में नाम वस्तुओं के साथ-साथ अवधारणाओं का प्रतिनिधित्व कर सकते हैं, नेमस्पेस प्राकृतिक भाषा, निर्मित भाषा, पेशे की तकनीकी शब्दावली, बोली, सामाजिक, या कृत्रिम भाषा (जैसे, प्रोग्रामिंग भाषा) हो सकती है।
  • जावा (प्रोग्रामिंग भाषा) में, नेमस्पेस में दिखाई देने वाले पहचानकर्ताओं का छोटा (स्थानीय) नाम होता है और नेमस्पेस के बाहर उपयोग के लिए अद्वितीय लंबा योग्य नाम होता है।
  • कुछ कंपाइलर्स (सी ++ जैसी भाषाओं के लिए) नाम मंगलिंग नामक प्रक्रिया में कंपाइलर में आंतरिक उपयोग के लिए नामस्थान और नामों को जोड़ते हैं।

साथ ही इसके सार भाषा तकनीकी उपयोग जैसा कि ऊपर वर्णित है, कुछ भाषाओं में अन्य उपयोगों के साथ स्पष्ट नाम स्थान नियंत्रण के लिए विशिष्ट कीवर्ड का उपयोग किया जाता है। नीचे C++ में नाम स्थान का उदाहरण दिया गया है:

#include <iostream>

// This is how one brings a name into the current scope.  In this case, it's
// bringing them into global scope.
using std::cout;
using std::endl;

namespace box1 {
    int box_side = 4;
}

namespace box2 {
    int box_side = 12;
}

int main() {
    int box_side = 42;
    cout << box1::box_side << endl;  // Outputs 4.
    cout << box2::box_side << endl;  // Outputs 12.
    cout << box_side << endl;  // Outputs 42.
}

कंप्यूटर-विज्ञान के विचार

कंप्यूटर विज्ञान में नाम स्थान (कभी-कभी नाम का दायरा भी कहा जाता है) अमूर्त कंटेनर या पर्यावरण है जो विशिष्ट पहचानकर्ताओं या प्रतीकों (अर्थात नाम) के तार्किक समूह को धारण करने के लिए बनाया गया है। नामस्थान में परिभाषित पहचानकर्ता केवल उस नामस्थान से जुड़ा होता है। ही पहचानकर्ता को कई नामस्थानों में स्वतंत्र रूप से परिभाषित किया जा सकता है। अर्थात्, नामस्थान में परिभाषित पहचानकर्ता का वही अर्थ हो सकता है या नहीं हो सकता है जो दूसरे नामस्थान में परिभाषित समान पहचानकर्ता के रूप में है। नामस्थानों का समर्थन करने वाली भाषाएं उन नियमों को निर्दिष्ट करती हैं जो निर्धारित करते हैं कि कौन सा नामस्थान पहचानकर्ता (इसकी परिभाषा नहीं) से संबंधित है।[10]

इस अवधारणा को सादृश्य द्वारा चित्रित किया जा सकता है। कल्पना कीजिए कि दो कंपनियां, एक्स और वाई, प्रत्येक अपने कर्मचारियों को आईडी नंबर प्रदान करती हैं। X के पास ही आईडी नंबर वाले दो कर्मचारी नहीं होने चाहिए, और इसी तरह Y के लिए; लेकिन दोनों कंपनियों में ही आईडी नंबर का इस्तेमाल करना कोई समस्या नहीं है। उदाहरण के लिए, यदि बिल कंपनी X के लिए काम करता है और जेन कंपनी Y के लिए काम करता है, तो उनमें से प्रत्येक के लिए कर्मचारी #123 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी नेमस्पेस के रूप में कार्य करती है। यह ही पहचानकर्ता के लिए प्रत्येक नामस्थान में अलग व्यक्ति की पहचान करने में समस्या पैदा नहीं करता है।

बड़े कंप्यूटर प्रोग्राम या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #Emulating नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक प्रतिरूपकता (प्रोग्रामिंग) बन जाता है।

डेटा स्टोरेज डिवाइस और कई आधुनिक प्रोग्रामिंग भाषाएं नामस्थानों का समर्थन करती हैं। स्टोरेज डिवाइस निर्देशिकाओं (या फ़ोल्डर्स) को नामस्थान के रूप में उपयोग करते हैं। यह दो फ़ाइलों को ही नाम के साथ डिवाइस पर संग्रहीत करने की अनुमति देता है जब तक कि वे अलग-अलग निर्देशिकाओं में संग्रहीत हों। पायथन (प्रोग्रामिंग भाषा) (जैसे C++, Python (प्रोग्रामिंग लैंग्वेज)) में, नेमस्पेस का नामकरण करने वाले पहचानकर्ता स्वयं संलग्न नेमस्पेस से जुड़े होते हैं। इस प्रकार, इन भाषाओं में नेमस्पेस नेमस्पेस ट्री (डेटा स्ट्रक्चर) बनाते हुए नेस्ट कर सकते हैं। इस वृक्ष के मूल में अनाम वैश्विक नामस्थान है।

सामान्य भाषाओं में प्रयोग करें

सी

C99 के बाद से C (प्रोग्रामिंग लैंग्वेज) में नामस्थान के रूप में अनाम स्ट्रक्चर्स का उपयोग करना संभव है।

// helper.c
static int _add(int a, int b) {
    return a + b;
}

const struct {
    double pi;
    int (*add) (int, int);
} helper = { 3.14, _add };

// helper.h
const struct {
    double pi;
    int (*add) (int, int);
} helper;

// main.c
#include <stdio.h>
#include "helper.h"

int main(){
    printf("3 + 2 = %d\n", helper.add(3, 2));
    printf("pi is %f\n", helper.pi);
}

सी ++

सी ++ में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।[11]

namespace abc {
    int bar;
}

इस ब्लॉक के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस ब्लॉक के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, के बाहर namespace abc, bar लिखा जाना चाहिए abc::bar पहुँचा जाना है। सी ++ में और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर

using namespace abc;

कोड का टुकड़ा, उपसर्ग abc:: अब जरूरत नहीं है। पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।

int foo;

इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक :: उपसर्ग किया जा सकता है। उदाहरण के लिए, foo भी लिखा जा सकता है ::foo.

सी ++ में नेमस्पेस रिज़ॉल्यूशन पदानुक्रमित है। इसका मतलब है कि काल्पनिक नाम स्थान के भीतर food::soup, पहचानकर्ता chicken का अर्थ है food::soup::chicken. अगर food::soup::chicken मौजूद नहीं है, यह तब संदर्भित करता है food::chicken. यदि कोई नहीं food::soup::chicken और न food::chicken अस्तित्व, chicken का अर्थ है ::chicken, वैश्विक नाम स्थान में पहचानकर्ता।

नामकरण टकराव से बचने के लिए सी ++ में नामस्थान अक्सर उपयोग किए जाते हैं। हालांकि हाल ही के C++ कोड में नामस्थानों का बड़े पैमाने पर उपयोग किया जाता है, अधिकांश पुराने कोड इस सुविधा का उपयोग नहीं करते हैं क्योंकि यह भाषा के शुरुआती संस्करणों में मौजूद नहीं था। उदाहरण के लिए, संपूर्ण C++ मानक पुस्तकालय के भीतर परिभाषित किया गया है namespace std, लेकिन मानकीकरण से पहले कई घटक मूल रूप से वैश्विक नामस्थान में थे। प्रोग्रामर सम्मिलित कर सकता है using नेमस्पेस रिज़ॉल्यूशन आवश्यकताओं को बायपास करने और पुराने कोड के साथ पश्चगामी संगतता प्राप्त करने का निर्देश जो सभी पहचानकर्ताओं को वैश्विक नामस्थान में होने की अपेक्षा करता है। हालांकि का उपयोग using पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है।

== जावा

जावा (प्रोग्रामिंग लैंग्वेज) में, नेमस्पेस का विचार जावा पैकेज में सन्निहित है। सभी कोड पैकेज के अंतर्गत आते हैं, हालाँकि उस पैकेज को स्पष्ट रूप से नाम देने की आवश्यकता नहीं है। उदाहरण के लिए उपयुक्त पहचानकर्ता से पहले पैकेज नाम को उपसर्ग करके अन्य पैकेजों से कोड का उपयोग किया जाता है class String में package java.lang कहा जा सकता है java.lang.String (इसे पूरी तरह योग्य नाम के रूप में जाना जाता है)। सी ++ की तरह, जावा संरचना प्रदान करता है जो पैकेज नाम टाइप करने के लिए अनावश्यक बनाता है (import). हालाँकि, कुछ विशेषताओं (जैसे प्रतिबिंब (कंप्यूटर विज्ञान)) के लिए प्रोग्रामर को पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता होती है।

सी ++ के विपरीत, जावा में नामस्थान श्रेणीबद्ध नहीं हैं जहां तक ​​​​भाषा के वाक्य-विन्यास का संबंध है। हालाँकि, संकुल को पदानुक्रमित तरीके से नामित किया गया है। उदाहरण के लिए, से शुरू होने वाले सभी पैकेज java जावा मंच का हिस्सा हैं—पैकेज java.lang भाषा के लिए कक्षाएं कोर शामिल हैं, और java.lang.reflect विशेष रूप से प्रतिबिंब से संबंधित मुख्य वर्ग शामिल हैं।

जावा (और एडा (प्रोग्रामिंग भाषा) में, सी शार्प (प्रोग्रामिंग भाषा) | सी #, और अन्य), नामस्थान/पैकेज कोड की सिमेंटिक श्रेणियों को व्यक्त करते हैं। उदाहरण के लिए, सी # में, namespace System सिस्टम (.NET फ्रेमवर्क) द्वारा प्रदान किया गया कोड शामिल है। ये श्रेणियां कितनी विशिष्ट हैं और भाषा से भाषा में पदानुक्रम कितने गहरे हैं।

फ़ंक्शन (प्रोग्रामिंग) और क्लास (कंप्यूटर साइंस) गुंजाइश (प्रोग्रामिंग) को अंतर्निहित नामस्थान के रूप में देखा जा सकता है जो कि दृश्यता, पहुंच और वस्तु जीवनकाल के साथ अटूट रूप से जुड़ा हुआ है।

सी #

C# भाषा में नेमस्पेस का अत्यधिक उपयोग किया जाता है। अधिक स्पष्ट रूप से उपयोग करने और अव्यवस्था से बचने के लिए सभी .NET फ्रेमवर्क क्लासेस नेमस्पेस में आयोजित की जाती हैं। इसके अलावा, कस्टम नेमस्पेस का प्रोग्रामर द्वारा बड़े पैमाने पर उपयोग किया जाता है, दोनों अपने काम को व्यवस्थित करने और नामकरण टकराव से बचने के लिए।

किसी वर्ग का संदर्भ देते समय, किसी को या तो उसका पूर्ण रूप से योग्य नाम निर्दिष्ट करना चाहिए, जिसका अर्थ है कि नाम स्थान के बाद वर्ग का नाम,

System.Console.WriteLine("Hello World!");
int i = System.Convert.ToInt32("123");

या उपयोग कथन जोड़ें। यह उस नामस्थान में सभी वर्गों के पूर्ण नाम का उल्लेख करने की आवश्यकता को समाप्त करता है।

using System;

Console.WriteLine("Hello World!");
int i = Convert.ToInt32("123");

उपरोक्त उदाहरणों में, सिस्टम नामस्थान है, और कंसोल और कन्वर्ट सिस्टम के भीतर परिभाषित वर्ग हैं।

पायथन

पायथन (प्रोग्रामिंग लैंग्वेज) में, नेमस्पेस को अलग-अलग मॉड्यूल द्वारा परिभाषित किया जाता है, और चूंकि मॉड्यूल को पदानुक्रमित पैकेजों में समाहित किया जा सकता है, तो नामस्थान भी पदानुक्रमित होते हैं।[12][13]

सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से एक्सेस किए जाते हैं।

# assume modulea defines two functions : func1() and func2() and one class : Class1
import Modulea

Modulea.func1()
Modulea.func2()
a = Modulea.Class1()

from ... import ... e> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना एक्सेस किया जा सकता है:

# assume Modulea defines two functions : func1() and func2() and one class : Class1
from Modulea import func1

func1()
func2() # this will fail as an undefined name, as will the full name Modulea.func2()
a = Class1() # this will fail as an undefined name, as will the full name Modulea.Class1()

चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।

कथन का विशेष रूप है from ... import * जो नामित पैकेज में परिभाषित सभी नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में आयात करता है। आयात के इस रूप का उपयोग, हालांकि भाषा के भीतर समर्थित है, आम तौर पर हतोत्साहित किया जाता है क्योंकि यह कॉलिंग मॉड्यूल के नाम स्थान को प्रदूषित करता है और नाम की गड़बड़ी के मामले में पहले से परिभाषित नामों को अधिलेखित कर देगा।[14]

पायथन भी समर्थन करता है import x as y कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:

import numpy as np

a = np.arange(1000)
एक्सएमएल नेमस्पेस

एक्सएमएल में, एक्सएमएल नेमस्पेस विनिर्देश प्रोग्रामिंग भाषाओं में नेमस्पेस की भूमिका के समान, एक्सएमएल दस्तावेज़ में तत्वों और विशेषताओं के नामों को अद्वितीय बनाने में सक्षम बनाता है। एक्सएमएल नेमस्पेस का उपयोग करते हुए, एक्सएमएल दस्तावेज़ों में से अधिक एक्सएमएल शब्दावली से तत्व या विशेषता नाम शामिल हो सकते हैं।

पीएचपी

नेमस्पेस को संस्करण 5.3 के बाद से Php में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।

PHP में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।

# File phpstar/foobar.php

namespace phpstar;

class FooBar
{
    public function foo(): void
    {
        echo 'Hello world, from function foo';
    }

    public function bar(): void
    {
        echo 'Hello world, from function bar';
    }
}

हम निम्नलिखित विभिन्न तरीकों से PHP नेमस्पेस का संदर्भ दे सकते हैं:

# File index.php

# Include the file
include "phpstar/foobar.php";

# Option 1: directly prefix the class name with the namespace
$obj_foobar = new \phpstar\FooBar();

# Option 2: import the namespace
use phpstar\FooBar;
$obj_foobar = new FooBar();

# Option 2a: import & alias the namespace
use phpstar\FooBar as FB;
$obj_foobar = new FB();

# Access the properties and methods with regular way
$obj_foobar->foo();
$obj_foobar->bar();

नामस्थानों का अनुकरण

नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, पहचानकर्ता नामकरण सम्मेलन का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि libpng अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:

png_create_write_struct
png_get_signature
png_read_row
png_set_invalid

यह नामकरण प्रथा (प्रोग्रामिंग) उचित आश्वासन प्रदान करती है कि पहचानकर्ता अद्वितीय हैं और इसलिए बड़े कार्यक्रमों में टकराव के नामकरण के बिना उपयोग किया जा सकता है।[15] इसी तरह, मूल रूप से फोरट्रान (जैसे, BLAS, LAPACK) में लिखे गए कई पैकेज किसी फ़ंक्शन के नाम के पहले कुछ अक्षरों को यह इंगित करने के लिए आरक्षित करते हैं कि यह किस समूह से संबंधित है।

इस तकनीक में कई कमियां हैं:

  • यह नेस्टेड नेमस्पेस के लिए अच्छी तरह से स्केल नहीं करता है; पहचानकर्ता अत्यधिक लंबे हो जाते हैं क्योंकि पहचानकर्ताओं के सभी उपयोग पूरी तरह से योग्य नाम | पूरी तरह से नामस्थान-योग्य होने चाहिए।
  • व्यक्ति या संगठन असंगत नामकरण परंपराओं का उपयोग कर सकते हैं, संभावित रूप से अवांछित अस्पष्टता का परिचय दे सकते हैं।
  • पहचानकर्ताओं के समूहों पर कंपाउंड या क्वेरी-आधारित संचालन, नामस्थानों के आधार पर, जिसमें वे घोषित किए गए हैं, बोझिल या अक्षम्य हैं।
  • प्रतिबंधित पहचानकर्ता लंबाई वाली भाषाओं में, उपसर्गों का उपयोग उन वर्णों की संख्या को सीमित करता है जिनका उपयोग यह पहचानने के लिए किया जा सकता है कि फ़ंक्शन क्या करता है। मूल रूप से फोरट्रान में लिखे गए पैकेजों के लिए यह विशेष समस्या है, जो प्रति पहचानकर्ता केवल 6 वर्णों की पेशकश करता है। उदाहरण के लिए, BLAS फ़ंक्शन का नाम DGEMM फ़ंक्शन इंगित करता है कि यह डबल-परिशुद्धता संख्या (डी) और सामान्य मैट्रिक्स (जीई) पर संचालित होता है, और केवल अंतिम दो अक्षर दिखाते हैं कि यह वास्तव में क्या करता है: मैट्रिक्स-मैट्रिक्स गुणन (एमएम)।

कई फायदे हैं:

  • स्रोत-कोड फ़ाइलों में नामों का पता लगाने के लिए किसी विशेष सॉफ़्टवेयर टूल की आवश्यकता नहीं होती है। पकड़ की तरह साधारण कार्यक्रम पर्याप्त है।
  • कोई नामस्थान नाम विरोध नहीं है।
  • नाम-परेशान करने की कोई आवश्यकता नहीं है, और इस प्रकार संभावित असंगति की कोई समस्या नहीं है।

यह भी देखें

संदर्भ

  1. Adya, Atul; Bolosky, William; Castro, Miguel; Cermak, Gerald; Chaiken, Ronnie; Douceur, John; Howell, Jon; Lorch, Jacob; Theimer, Marvin; Wattenhofer, Roger (2002). FARSITE: Federated, Available, and Reliable Storage for an Incompletely Trusted Environment (PDF). Proc. USENIX Symp. on Operating Systems Design and Implementation. Archived from the original (PDF) on 2010-07-28. The primary construct established by a file system is a hierarchical directory namespace, which is the logical repository for files.
  2. "C# FAQ: What is a namespace". C# Online Net. Archived from the original on 2013-10-20. Retrieved 2010-02-23. A namespace is nothing but a group of assemblies, classes, or types. A namespace acts as a container—like a disk folder—for classes organized into groups usually based on functionality. C# namespace syntax allows namespaces to be nested.
  3. "An overview of namespaces in PHP". PHP Manual. What are namespaces? In the broadest definition, namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.
  4. "Creating and Using Packages". Java Documentation. Oracle. A package is a grouping of related types providing access protection and name space management. Note that types refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so types are often referred to in this lesson simply as classes and interfaces.[better source needed]
  5. XML Core Working Group (8 December 2009). "Namespaces in XML 1.0 (Third Edition)". W3C. Retrieved 2012-03-30.
  6. Moats, Ryan (May 1997). "Syntax". URN Syntax. IETF. p. 1. sec. 2. doi:10.17487/RFC2141. RFC 2141. Retrieved 2012-03-30.
  7. Stephen J. Gowdy. "List of USB ID's". 2013.
  8. Sollins & Masinter (December 1994). "Requirements for functional capabilities". Functional Requirements for Uniform Resource Names. IETF. p. 3. sec. 2. doi:10.17487/RFC1731. RFC 1731. Retrieved 2012-03-30.
  9. "C# FAQ: What is a namespace". C# Online Net. Archived from the original on October 20, 2013. Retrieved 2010-02-23. For instance, [under Windows], to access the built-in input-output (I/O) classes and members, use the System.IO namespace. Or, to access Web-related classes and members, use the System.Web namespace.
  10. "A namespace is "a logical grouping of the names used within a program."". Webopedia.com. 10 April 2002. Retrieved 2011-07-26.
  11. "Namespaces allow to group entities like classes, objects and functions under a name". Cplusplus.com. Retrieved 2011-07-26.
  12. "6. Modules". The Python Tutorial. Python Software Foundation. Retrieved 25 October 2010.
  13. "Python Scopes and Namespaces". Docs.python.org. Retrieved 2011-07-26.
  14. https://docs.python.org/3/tutorial/modules.html "in general the practice of importing * from a module or package is frowned upon"
  15. Danny Kalev. "Why I Hate Namespaces". Archived from the original on 2016-07-09.{{cite web}}: CS1 maint: bot: original URL status unknown (link)