नेमस्पेस: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
{{for|लिनक्स कर्नेल की एक विशेषता|लिनक्स नामस्थान}} | {{for|लिनक्स कर्नेल की एक विशेषता|लिनक्स नामस्थान}} | ||
{{short description|Container for a set of identifiers}} | {{short description|Container for a set of identifiers}} | ||
[[कम्प्यूटिंग]] में, नामस्थान संकेतों ('' | [[कम्प्यूटिंग]] में, नामस्थान संकेतों (''नामों'') का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नामस्थान यह सुनिश्चित करता है कि दिए गए ऑब्जेक्ट्स के सभी सेट के अद्वितीय नाम हों ताकि उन्हें आसानी से [[पहचानकर्ता|पहचाना]] जा सकें। | ||
अलग-अलग संदर्भों में नामों के पुन: उपयोग की अनुमति देने के लिए नामस्थानों को आमतौर पर पदानुक्रम के रूप में संरचित किया जाता है। सादृश्य के रूप में, [[नृविज्ञान]] की प्रणाली पर विचार करें जहां प्रत्येक व्यक्ति का दिया गया नाम है, साथ ही परिवार का नाम उनके रिश्तेदारों के साथ साझा किया जाता है। यदि परिवार के सदस्यों के पहले नाम केवल प्रत्येक परिवार के भीतर अद्वितीय हैं, तो प्रत्येक व्यक्ति को पहले नाम और परिवार के नाम के संयोजन से विशिष्ट रूप से पहचाना जा सकता है; केवल जेन डो है, हालांकि कई जेन हो सकते हैं। डो परिवार के नाम स्थान के भीतर, सिर्फ जेन इस व्यक्ति को स्पष्ट रूप से नामित करने के लिए पर्याप्त है, जबकि सभी लोगों के वैश्विक नाम स्थान के भीतर, पूरा नाम इस्तेमाल किया जाना चाहिए। | अलग-अलग संदर्भों में नामों के पुन: उपयोग की अनुमति देने के लिए नामस्थानों को आमतौर पर पदानुक्रम के रूप में संरचित किया जाता है। सादृश्य के रूप में, लोगों के नामकरण की [[नृविज्ञान]] की प्रणाली पर विचार करें जहां प्रत्येक व्यक्ति का एक दिया गया नाम है, साथ ही परिवार का नाम उनके रिश्तेदारों के साथ साझा किया जाता है। यदि परिवार के सदस्यों के पहले नाम केवल प्रत्येक परिवार के भीतर अद्वितीय हैं, तो प्रत्येक व्यक्ति को पहले नाम और परिवार के नाम के संयोजन से विशिष्ट रूप से पहचाना जा सकता है; केवल जेन डो है, हालांकि कई जेन हो सकते हैं। डो परिवार के नाम स्थान के भीतर, सिर्फ जेन इस व्यक्ति को स्पष्ट रूप से नामित करने के लिए पर्याप्त है, जबकि सभी लोगों के वैश्विक नाम स्थान के भीतर, पूरा नाम इस्तेमाल किया जाना चाहिए। | ||
नामस्थानों के प्रमुख उदाहरणों में [[फाइल सिस्टम]] शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।<ref>{{cite conference | नामस्थानों के प्रमुख उदाहरणों में [[फाइल सिस्टम]] शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।<ref>{{cite conference | ||
Line 34: | Line 34: | ||
|archive-url=https://web.archive.org/web/20100728202945/http://paul.rutgers.edu/cs545/S06/papers/adya-farsite-osdi-2002.pdf | |archive-url=https://web.archive.org/web/20100728202945/http://paul.rutgers.edu/cs545/S06/papers/adya-farsite-osdi-2002.pdf | ||
|archive-date=2010-07-28 | |archive-date=2010-07-28 | ||
}}</ref> | }}</ref> कुछ [[प्रोग्रामिंग भाषा]] अपने वेरिएबल (कंप्यूटर साइंस) और [[सबरूटीन]] को नामस्थान में व्यवस्थित करती हैं।<ref>{{cite web|url=http://en.csharp-online.net/CSharp_FAQ:_What_is_a_namespace |title=C# FAQ: What is a namespace |publisher=C# Online Net |quote=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. |access-date=2010-02-23 |archive-url=https://web.archive.org/web/20131020150529/http://tutorials.csharp-online.net/index.php?title=CSharp_FAQ%3A_What_is_a_namespace |archive-date=2013-10-20 }}</ref><ref>{{Cite web|url=http://php.net/manual/en/language.namespaces.rationale.php|title=An overview of namespaces in PHP|website=PHP Manual|quote=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.}}</ref><ref>{{Cite web|url=https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html|title=Creating and Using Packages|website=Java Documentation|publisher=Oracle|quote=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|date=July 2015}}</ref> [[संगणक संजाल|कंप्यूटर नेटवर्क]] और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, [[वेबसाइट]] और रिमोट फाइल्स। वर्चुअलाइजेशन [[ओएस-स्तरीय वर्चुअलाइजेशन]] का समर्थन करने के लिए [[ऑपरेटिंग सिस्टम]] पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं। | ||
कुछ [[प्रोग्रामिंग भाषा]] अपने वेरिएबल (कंप्यूटर साइंस) और [[सबरूटीन]] | |||
[[संगणक संजाल]] और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, [[वेबसाइट]] और रिमोट फाइल्स। वर्चुअलाइजेशन [[ओएस-स्तरीय वर्चुअलाइजेशन]] का समर्थन करने के लिए [[ऑपरेटिंग सिस्टम]] पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं। | |||
इसी तरह, | इसी तरह, पदानुक्रमित (कंप्यूटिंग) फाइल सिस्टम फाइलों को निर्देशिकाओं में व्यवस्थित करते हैं। प्रत्येक निर्देशिका अलग नामस्थान है, ताकि निर्देशिका पत्र और चालान दोनों में जेन की फ़ाइल हो सकती है। | ||
[[कंप्यूटर प्रोग्रामिंग]] में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं। | [[कंप्यूटर प्रोग्रामिंग]] में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं। | ||
Line 45: | Line 43: | ||
== नाम विरोध == | == नाम विरोध == | ||
तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न | तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न एक्सएमएल अनुप्रयोगों से एक्सएमएल दस्तावेज़ों को मिलाने का प्रयास करते समय यह अक्सर विरोध का कारण बनता है। | ||
इस | इस एक्सएमएल में एचटीएमएल तालिका की जानकारी होती है:<syntaxhighlight lang="d"> | ||
<table> | <table> | ||
<tr> | <tr> | ||
Line 56: | Line 54: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
इस एक्सएमएल में [[टेबल (फर्नीचर)]] (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:<syntaxhighlight lang="d"> | इस एक्सएमएल में [[टेबल (फर्नीचर)|तालिका (फर्नीचर)]] (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:<syntaxhighlight lang="d"> | ||
<table> | <table> | ||
<name>African Coffee Table</name> | <name>African Coffee Table</name> | ||
Line 62: | Line 60: | ||
<length>120</length> | <length>120</length> | ||
</table> | </table> | ||
</syntaxhighlight>यदि इन | </syntaxhighlight>यदि इन एक्सएमएल अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में {{tag|table}} तत्व होता हैं, लेकिन तत्वों की सामग्री और अर्थ भिन्न होते हैं। | ||
एक्सएमएल पार्सर को यह नहीं पता होगा कि इन अंतरों को कैसे नियंत्रित किया जाए। | |||
=== उपसर्ग के माध्यम से समाधान === | === उपसर्ग के माध्यम से समाधान === | ||
एक्सएमएल में नाम के विरोध को नाम उपसर्ग के प्रयोग से आसानी से टाला जा सकता है। | |||
निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।<syntaxhighlight lang="d"> | निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।<syntaxhighlight lang="d"> | ||
Line 133: | Line 131: | ||
=== प्रतिनिधिमंडल === | === प्रतिनिधिमंडल === | ||
पार्टियों के बीच जिम्मेदारियों का | वर्ल्ड वाइड वेब की संरचना जैसे वास्तविक दुनिया के अनुप्रयोगों में पार्टियों के बीच जिम्मेदारियों का प्रत्यायोजन महत्वपूर्ण है। नामस्थान वैश्विक विशिष्टता को बनाए रखते हुए कई नाम जारी करने वाले संगठनों को पहचानकर्ता असाइनमेंट सौंपने की अनुमति देते हैं।<ref>{{cite IETF |title= Functional Requirements for Uniform Resource Names |rfc=1731 |sectionname=Requirements for functional capabilities |section=2 |page=3 |last= Sollins & Masinter |date=December 1994 |publisher=[[Internet Engineering Task Force|IETF]] |access-date= 2012-03-30}}</ref> केंद्रीय [[पंजीकरण प्राधिकरण]] [[राष्ट्रीय इंटरनेट रजिस्ट्री]] को पंजीकृत करता है। प्रत्येक नेमस्पेस नाम एक संगठन को आवंटित किया जाता है जो बाद में उनके आवंटित नेमस्पेस में नामों के असाइनमेंट के लिए जिम्मेदार होता है। यह संगठन एक नाम जारी करने वाला संगठन हो सकता है जो स्वयं [[मेटाडेटा रजिस्ट्री]] करता है,या किसी अन्य पंजीकरण प्राधिकरण को नाम निर्दिष्ट करता है जो आगे उनके नामस्थान के कुछ हिस्सों को विभिन्न संगठनों को सौंपता है। | ||
=== पदानुक्रम=== | === पदानुक्रम=== | ||
Line 140: | Line 138: | ||
पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण [[डोमेन नाम]] है। | पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण [[डोमेन नाम]] है। | ||
गैर-पुनरावर्ती पदानुक्रम का उदाहरण [[समान संसाधन का नाम]] है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी ( | गैर-पुनरावर्ती पदानुक्रम का उदाहरण [[समान संसाधन का नाम]] है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी (आईएएनए) नंबर का प्रतिनिधित्व करता है। | ||
{| class=wikitable | {| class=wikitable | ||
Line 159: | Line 157: | ||
=== | === नामस्थान बनाम स्कोप === | ||
नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास। | नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास। | ||
Line 173: | Line 171: | ||
== प्रोग्रामिंग भाषाओं में == | == प्रोग्रामिंग भाषाओं में == | ||
कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, | कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, नामस्थान का उदाहरण पदानुक्रमित है। निर्देशिका में प्रत्येक नाम विशिष्ट रूप से फ़ाइल या उपनिर्देशिका की पहचान करता है।<ref>{{cite web|url=http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_namespace|title=C# FAQ: What is a namespace|website=C# Online Net|archive-url=https://web.archive.org/web/20131020153832/http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_namespace|archive-date=October 20, 2013|access-date=2010-02-23|quote=For instance, [under [[Microsoft Windows|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{{Not a typo|.}}Web namespace.}}</ref> | ||
नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को [[संदर्भ (कंप्यूटिंग)]] भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है। | नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को [[संदर्भ (कंप्यूटिंग)]] भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है। | ||
नामस्थान की अन्य विशेषताएँ निम्नलिखित हैं: | नामस्थान की अन्य विशेषताएँ निम्नलिखित हैं: | ||
* | * नामस्थान में नाम वस्तुओं के साथ-साथ [[अवधारणा]]ओं का प्रतिनिधित्व कर सकते हैं, नामस्थान [[प्राकृतिक भाषा]], [[निर्मित भाषा]], पेशे की तकनीकी शब्दावली, [[बोली]], सामाजिक, या कृत्रिम भाषा (जैसे, प्रोग्रामिंग भाषा) हो सकती है। | ||
* [[जावा (प्रोग्रामिंग भाषा)]] में, | * [[जावा (प्रोग्रामिंग भाषा)]] में, नामस्थान में दिखाई देने वाले पहचानकर्ताओं का छोटा (स्थानीय) नाम होता है और नामस्थान के बाहर उपयोग के लिए अद्वितीय लंबा योग्य नाम होता है। | ||
* कुछ कंपाइलर्स ([[सी ++]] जैसी भाषाओं के लिए) [[नाम मंगलिंग]] नामक प्रक्रिया में कंपाइलर में आंतरिक उपयोग के लिए नामस्थान और नामों को जोड़ते हैं। | * कुछ कंपाइलर्स ([[सी ++]] जैसी भाषाओं के लिए) [[नाम मंगलिंग]] नामक प्रक्रिया में कंपाइलर में आंतरिक उपयोग के लिए नामस्थान और नामों को जोड़ते हैं। | ||
Line 206: | Line 205: | ||
===कंप्यूटर-विज्ञान के विचार === | ===कंप्यूटर-विज्ञान के विचार === | ||
कंप्यूटर विज्ञान में नाम स्थान (कभी-कभी नाम का दायरा भी कहा जाता है) अमूर्त कंटेनर या पर्यावरण है जो विशिष्ट पहचानकर्ताओं या [[प्रतीक]] | कंप्यूटर विज्ञान में नाम स्थान (कभी-कभी नाम का दायरा भी कहा जाता है) अमूर्त कंटेनर या पर्यावरण है जो विशिष्ट पहचानकर्ताओं या [[प्रतीक|प्रतीकों]] (अर्थात नाम) के तार्किक समूह को धारण करने के लिए बनाया गया है। नामस्थान में परिभाषित पहचानकर्ता केवल उस नामस्थान से जुड़ा होता है। ही पहचानकर्ता को कई नामस्थानों में स्वतंत्र रूप से परिभाषित किया जा सकता है। अर्थात्, नामस्थान में परिभाषित पहचानकर्ता का वही अर्थ हो सकता है या नहीं हो सकता है जो दूसरे नामस्थान में परिभाषित समान पहचानकर्ता के रूप में है। नामस्थानों का समर्थन करने वाली भाषाएं उन नियमों को निर्दिष्ट करती हैं जो निर्धारित करते हैं कि कौन सा नामस्थान पहचानकर्ता (इसकी परिभाषा नहीं) से संबंधित है।<ref>{{cite web |url=http://www.webopedia.com/TERM/N/namespace.html |title=A namespace is "a logical grouping of the names used within a program."|date=10 April 2002 | publisher=Webopedia.com| access-date=2011-07-26}}</ref> | ||
इस अवधारणा को सादृश्य द्वारा चित्रित किया जा सकता है। कल्पना कीजिए कि दो कंपनियां, एक्स और वाई, प्रत्येक अपने कर्मचारियों को आईडी नंबर प्रदान करती हैं। X के पास ही आईडी नंबर वाले दो कर्मचारी नहीं होने चाहिए, और इसी तरह Y के लिए; लेकिन दोनों कंपनियों में ही आईडी नंबर का इस्तेमाल करना कोई समस्या नहीं है। उदाहरण के लिए, यदि बिल कंपनी X के लिए काम करता है और जेन कंपनी Y के लिए काम करता है, तो उनमें से प्रत्येक के लिए कर्मचारी #123 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी | इस अवधारणा को सादृश्य द्वारा चित्रित किया जा सकता है। कल्पना कीजिए कि दो कंपनियां, एक्स और वाई, प्रत्येक अपने कर्मचारियों को आईडी नंबर प्रदान करती हैं। X के पास ही आईडी नंबर वाले दो कर्मचारी नहीं होने चाहिए, और इसी तरह Y के लिए; लेकिन दोनों कंपनियों में ही आईडी नंबर का इस्तेमाल करना कोई समस्या नहीं है। उदाहरण के लिए, यदि बिल कंपनी X के लिए काम करता है और जेन कंपनी Y के लिए काम करता है, तो उनमें से प्रत्येक के लिए कर्मचारी #123 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी नामस्थान के रूप में कार्य करती है। यह ही पहचानकर्ता के लिए प्रत्येक नामस्थान में अलग व्यक्ति की पहचान करने में समस्या पैदा नहीं करता है। | ||
बड़े [[कंप्यूटर प्रोग्राम]] या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, # | बड़े [[कंप्यूटर प्रोग्राम]] या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #अनुसरण नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक [[प्रतिरूपकता (प्रोग्रामिंग)]] बन जाता है। | ||
[[डेटा स्टोरेज डिवाइस]] और कई आधुनिक प्रोग्रामिंग भाषाएं नामस्थानों का समर्थन करती हैं। | [[डेटा स्टोरेज डिवाइस|डेटा भण्डारण उपकरण]] और कई आधुनिक प्रोग्रामिंग भाषाएं नामस्थानों का समर्थन करती हैं। भण्डारण उपकरण निर्देशिकाओं (या फ़ोल्डर्स) को नामस्थान के रूप में उपयोग करते हैं। यह दो फ़ाइलों को ही नाम के साथ उपकरण पर संग्रहीत करने की अनुमति देता है जब तक कि वे अलग-अलग निर्देशिकाओं में संग्रहीत हों। [[पायथन (प्रोग्रामिंग भाषा)]] (जैसे C++, Python (प्रोग्रामिंग भाषा)) में, नामस्थान का नामकरण करने वाले पहचानकर्ता स्वयं संलग्न नामस्थान से जुड़े होते हैं। इस प्रकार, इन भाषाओं में नामस्थान नामस्थान ट्री (डेटा स्ट्रक्चर) बनाते हुए नेस्ट कर सकते हैं। इस वृक्ष के मूल में अस्पष्ट वैश्विक नामस्थान है। | ||
==== सामान्य भाषाओं में प्रयोग करें ==== | ==== सामान्य भाषाओं में प्रयोग करें ==== | ||
== सी == | == सी == | ||
[[C99]] के बाद से C (प्रोग्रामिंग | [[C99]] के बाद से C (प्रोग्रामिंग भाषा) में नामस्थान के रूप में अस्पष्ट संरचनाएं का उपयोग करना संभव है।<syntaxhighlight lang="d"> | ||
// helper.c | // helper.c | ||
static int _add(int a, int b) { | static int _add(int a, int b) { | ||
Line 245: | Line 244: | ||
== सी ++ == | == सी ++ == | ||
सी ++ में, | सी ++ में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।<ref>{{cite web|url=http://www.cplusplus.com/doc/tutorial/namespaces/ |title=Namespaces allow to group entities like classes, objects and functions under a name. |publisher=Cplusplus.com |access-date=2011-07-26}}</ref><syntaxhighlight lang="d"> | ||
namespace abc { | namespace abc { | ||
int bar; | int bar; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
इस | इस खंड के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस खंड के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, <code>namespace</code>, के बाहर <code>abc</code> <code>bar</code> को अभिगम करने के लिए <code>abc::bar</code> लिखा जाना चाहिए। सी ++ में एक और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर<syntaxhighlight lang="d"> | ||
using namespace abc; | using namespace abc; | ||
</syntaxhighlight>कोड का टुकड़ा, उपसर्ग <code>abc::</code> अब जरूरत नहीं है। | </syntaxhighlight>कोड का टुकड़ा, उपसर्ग <code>abc::</code> अब जरूरत नहीं है। | ||
Line 256: | Line 255: | ||
पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।<syntaxhighlight lang="d"> | पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।<syntaxhighlight lang="d"> | ||
int foo; | int foo; | ||
</syntaxhighlight>इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक <code>::</code> उपसर्ग किया जा सकता है। उदाहरण के लिए, <code>foo</code> | </syntaxhighlight>इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक <code>::</code> उपसर्ग किया जा सकता है। उदाहरण के लिए, <code>foo</code> को <code>::foo</code> भी लिखा जा सकता है। | ||
सी ++ में | सी ++ में नामस्थान रिज़ॉल्यूशन पदानुक्रमित है। इसका मतलब है कि काल्पनिक नाम स्थान के भीतर <code>food::soup</code>, पहचानकर्ता <code>chicken</code> का अर्थ है <code>food::soup::chicken</code>को संदर्भित करता है। यदि <code>food::soup::chicken</code> मौजूद नहीं है, तो यह <code>food::chicken</code> को संदर्भित करता है यदि न तो <code>food::soup::chicken</code> और न <code>food::chicken</code> मौजूद है, तो <code>chicken</code><code>::chicken</code> को संदर्भित करता है, जो वैश्विक नाम स्थान में एक पहचानकर्ता है। | ||
नामकरण टकराव से बचने के लिए सी ++ में नामस्थान अक्सर उपयोग किए जाते हैं। हालांकि हाल ही के C++ कोड में नामस्थानों का बड़े पैमाने पर उपयोग किया जाता है, अधिकांश पुराने कोड इस सुविधा का उपयोग नहीं करते हैं क्योंकि यह भाषा के शुरुआती संस्करणों में मौजूद नहीं था। उदाहरण के लिए, संपूर्ण C++ मानक पुस्तकालय के भीतर परिभाषित किया गया है <code>namespace std</code>, लेकिन मानकीकरण से पहले कई घटक मूल रूप से वैश्विक नामस्थान में थे। प्रोग्रामर सम्मिलित कर सकता है <code>using</code> | नामकरण टकराव से बचने के लिए सी ++ में नामस्थान अक्सर उपयोग किए जाते हैं। हालांकि हाल ही के C++ कोड में नामस्थानों का बड़े पैमाने पर उपयोग किया जाता है, अधिकांश पुराने कोड इस सुविधा का उपयोग नहीं करते हैं क्योंकि यह भाषा के शुरुआती संस्करणों में मौजूद नहीं था। उदाहरण के लिए, संपूर्ण C++ मानक पुस्तकालय के भीतर परिभाषित किया गया है <code>namespace std</code>, लेकिन मानकीकरण से पहले कई घटक मूल रूप से वैश्विक नामस्थान में थे। प्रोग्रामर सम्मिलित कर सकता है <code>using</code> नामस्थान रिज़ॉल्यूशन आवश्यकताओं को बायपास करने और पुराने कोड के साथ पश्चगामी संगतता प्राप्त करने का निर्देश जो सभी पहचानकर्ताओं को वैश्विक नामस्थान में होने की अपेक्षा करता है। हालांकि का उपयोग <code>using</code> पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है। | ||
===जावा === | |||
जावा (प्रोग्रामिंग | जावा (प्रोग्रामिंग भाषा) में, नामस्थान का विचार [[जावा पैकेज]] में सन्निहित है। सभी कोड पैकेज के अंतर्गत आते हैं, हालाँकि उस पैकेज को स्पष्ट रूप से नाम देने की आवश्यकता नहीं है। उदाहरण के लिए उपयुक्त पहचानकर्ता से पहले पैकेज नाम को उपसर्ग करके अन्य पैकेजों से कोड का उपयोग किया जाता है, उदाहरण के लिए <code>package [[java.lang]]</code> में <code>class String</code> को <code>java.lang.String</code> (इसे पूरी तरह योग्य नाम के रूप में जाना जाता है) के रूप में संदर्भित किया जा सकता है। सी ++ की तरह, जावा संरचना प्रदान करता है जो पैकेज नाम (<code>import</code>) टाइप करने के लिए अनावश्यक बनाता है। हालाँकि, कुछ विशेषताओं (जैसे [[प्रतिबिंब (कंप्यूटर विज्ञान)]]) के लिए प्रोग्रामर को पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता होती है। | ||
सी ++ के विपरीत, जावा में नामस्थान श्रेणीबद्ध नहीं हैं जहां तक भाषा के वाक्य-विन्यास का संबंध है। हालाँकि, संकुल को पदानुक्रमित तरीके से नामित किया गया है। उदाहरण के लिए, से शुरू होने वाले सभी पैकेज <code>java</code> [[जावा मंच]] का हिस्सा हैं—पैकेज {{Javadoc:SE|package=java.lang|java/lang}} भाषा के लिए कक्षाएं कोर शामिल हैं, और {{Javadoc:SE|package=java.lang.reflect|java/lang/reflect}} विशेष रूप से प्रतिबिंब से संबंधित मुख्य वर्ग शामिल हैं। | सी ++ के विपरीत, जावा में नामस्थान श्रेणीबद्ध नहीं हैं जहां तक भाषा के वाक्य-विन्यास का संबंध है। हालाँकि, संकुल को पदानुक्रमित तरीके से नामित किया गया है। उदाहरण के लिए, से शुरू होने वाले सभी पैकेज <code>java</code> [[जावा मंच]] का हिस्सा हैं—पैकेज {{Javadoc:SE|package=java.lang|java/lang}} भाषा के लिए कक्षाएं कोर शामिल हैं, और {{Javadoc:SE|package=java.lang.reflect|java/lang/reflect}} विशेष रूप से प्रतिबिंब से संबंधित मुख्य वर्ग शामिल हैं। | ||
जावा (और [[एडा (प्रोग्रामिंग भाषा)]] में | जावा (और [[एडा (प्रोग्रामिंग भाषा)]] में, नामस्थान/पैकेज कोड की सिमेंटिक श्रेणियों को व्यक्त करते हैं। उदाहरण के लिए, सी # में, <code>namespace System</code> सिस्टम (.NET फ्रेमवर्क) द्वारा प्रदान किया गया कोड शामिल है। ये श्रेणियां कितनी विशिष्ट हैं और भाषा से भाषा में पदानुक्रम कितने गहरे हैं। | ||
फ़ंक्शन (प्रोग्रामिंग) और क्लास (कंप्यूटर साइंस) [[गुंजाइश (प्रोग्रामिंग)]] को अंतर्निहित नामस्थान के रूप में देखा जा सकता है जो कि दृश्यता, पहुंच और [[वस्तु जीवनकाल]] के साथ अटूट रूप से जुड़ा हुआ है। | फ़ंक्शन (प्रोग्रामिंग) और क्लास (कंप्यूटर साइंस) [[गुंजाइश (प्रोग्रामिंग)|स्कोप्स (प्रोग्रामिंग)]] को अंतर्निहित नामस्थान के रूप में देखा जा सकता है जो कि दृश्यता, पहुंच और [[वस्तु जीवनकाल]] के साथ अटूट रूप से जुड़ा हुआ है। | ||
== सी # == | == सी # == | ||
C# भाषा में | C# भाषा में नामस्थान का अत्यधिक उपयोग किया जाता है। अधिक स्पष्ट रूप से उपयोग करने और अव्यवस्था से बचने के लिए सभी .NET फ्रेमवर्क क्लासेस नामस्थान में आयोजित की जाती हैं। इसके अलावा, कस्टम नामस्थान का प्रोग्रामर द्वारा बड़े पैमाने पर उपयोग किया जाता है, दोनों अपने काम को व्यवस्थित करने और नामकरण टकराव से बचने के लिए। | ||
किसी वर्ग का संदर्भ देते समय, किसी को या तो उसका पूर्ण रूप से योग्य नाम निर्दिष्ट करना चाहिए, जिसका अर्थ है कि नाम स्थान के बाद वर्ग का नाम,<syntaxhighlight lang="d"> | किसी वर्ग का संदर्भ देते समय, किसी को या तो उसका पूर्ण रूप से योग्य नाम निर्दिष्ट करना चाहिए, जिसका अर्थ है कि नाम स्थान के बाद वर्ग का नाम,<syntaxhighlight lang="d"> | ||
System.Console.WriteLine("Hello World!"); | System.Console.WriteLine("Hello World!"); | ||
Line 281: | Line 280: | ||
Console.WriteLine("Hello World!"); | Console.WriteLine("Hello World!"); | ||
int i = Convert.ToInt32("123"); | int i = Convert.ToInt32("123"); | ||
</syntaxhighlight>उपरोक्त उदाहरणों में, सिस्टम नामस्थान है, और | </syntaxhighlight>उपरोक्त उदाहरणों में, सिस्टम नामस्थान है, और सांत्वना और परिवर्तन सिस्टम के भीतर परिभाषित वर्ग हैं। | ||
=== पायथन === | === पायथन === | ||
पायथन (प्रोग्रामिंग | पायथन (प्रोग्रामिंग भाषा) में, नामस्थान को अलग-अलग मॉड्यूल द्वारा परिभाषित किया जाता है, और चूंकि मॉड्यूल को पदानुक्रमित पैकेजों में समाहित किया जा सकता है, तो नामस्थान भी पदानुक्रमित होते हैं।<ref>{{cite web|title=6. Modules|url=https://docs.python.org/tutorial/modules.html|work=The Python Tutorial|publisher=Python Software Foundation|access-date=25 October 2010}}</ref><ref>{{cite web|url=https://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces |title=Python Scopes and Namespaces |publisher=Docs.python.org |access-date=2011-07-26}}</ref> | ||
सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से | सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से अभिगम किए जाते हैं।<syntaxhighlight lang="d"> | ||
# assume modulea defines two functions : func1() and func2() and one class : Class1 | # assume modulea defines two functions : func1() and func2() and one class : Class1 | ||
import Modulea | import Modulea | ||
Line 292: | Line 291: | ||
Modulea.func2() | Modulea.func2() | ||
a = Modulea.Class1() | a = Modulea.Class1() | ||
</syntaxhighlight><code>from ... import ...</code | </syntaxhighlight><code>from ... import ...</code> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना अभिगम किया जा सकता है:<syntaxhighlight lang="d"> | ||
# assume Modulea defines two functions : func1() and func2() and one class : Class1 | # assume Modulea defines two functions : func1() and func2() and one class : Class1 | ||
from Modulea import func1 | from Modulea import func1 | ||
Line 301: | Line 300: | ||
</syntaxhighlight>चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है। | </syntaxhighlight>चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है। | ||
कथन का विशेष रूप | कथन का विशेष रूप <code>from ... import *</code> है, जो नामित पैकेज में परिभाषित सभी नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में आयात करता है। आयात के इस रूप का उपयोग, हालांकि भाषा के भीतर समर्थित है, आम तौर पर हतोत्साहित किया जाता है क्योंकि यह कॉलिंग मॉड्यूल के नाम स्थान को प्रदूषित करता है और नाम की अव्यवस्था के मामले में पहले से परिभाषित नामों को अधिलेखित कर देगा।<ref>https://docs.python.org/3/tutorial/modules.html "in general the practice of importing * from a module or package is frowned upon"</ref> | ||
पायथन भी समर्थन करता है <code>import x as y</code> कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:<syntaxhighlight lang="d"> | पायथन भी समर्थन करता है <code>import x as y</code> कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:<syntaxhighlight lang="d"> | ||
Line 309: | Line 308: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== एक्सएमएल | ===== एक्सएमएल नामस्थान ===== | ||
{{Main| | {{Main|एक्सएमएल नामस्थान | ||
[[एक्सएमएल]] में, एक्सएमएल | |||
मुख्य लेख: एक्सएमएल नेमस्पेस}} | |||
[[एक्सएमएल]] में, एक्सएमएल नामस्थान विनिर्देश प्रोग्रामिंग भाषाओं में नामस्थान की भूमिका के समान, एक्सएमएल दस्तावेज़ में तत्वों और विशेषताओं के नामों को अद्वितीय बनाने में सक्षम बनाता है। एक्सएमएल नामस्थान का उपयोग करते हुए, एक्सएमएल दस्तावेज़ों में से अधिक एक्सएमएल शब्दावली से तत्व या विशेषता नाम शामिल हो सकते हैं। | |||
===== पीएचपी ===== | ===== पीएचपी ===== | ||
नामस्थान को संस्करण 5.3 के बाद से [[Php|पीएचपी]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है। | |||
[[PHP]] में, | [[PHP|पीएचपी]] में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।<syntaxhighlight lang="d"> | ||
# File phpstar/foobar.php | # File phpstar/foobar.php | ||
Line 332: | Line 333: | ||
} | } | ||
} | } | ||
</syntaxhighlight>हम निम्नलिखित विभिन्न तरीकों से | </syntaxhighlight>हम निम्नलिखित विभिन्न तरीकों से पीएचपी नामस्थान का संदर्भ दे सकते हैं:<syntaxhighlight lang="d"> | ||
# File index.php | # File index.php | ||
Line 354: | Line 355: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===नामस्थानों का अनुकरण === | ===नामस्थानों का अनुकरण asasasa === | ||
नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, [[पहचानकर्ता नामकरण सम्मेलन]] का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि [[libpng]] अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:<syntaxhighlight lang="d"> | नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, [[पहचानकर्ता नामकरण सम्मेलन]] का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि [[libpng]] अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:<syntaxhighlight lang="d"> | ||
png_create_write_struct | png_create_write_struct | ||
Line 363: | Line 364: | ||
इस तकनीक में कई कमियां हैं: | इस तकनीक में कई कमियां हैं: | ||
* यह नेस्टेड | * यह नेस्टेड नामस्थान के लिए अच्छी तरह से स्केल नहीं करता है; पहचानकर्ता अत्यधिक लंबे हो जाते हैं क्योंकि पहचानकर्ताओं के सभी उपयोग पूरी तरह से योग्य नाम | पूरी तरह से नामस्थान-योग्य होने चाहिए। | ||
* व्यक्ति या संगठन असंगत नामकरण परंपराओं का उपयोग कर सकते हैं, संभावित रूप से अवांछित अस्पष्टता का परिचय दे सकते हैं। | * व्यक्ति या संगठन असंगत नामकरण परंपराओं का उपयोग कर सकते हैं, संभावित रूप से अवांछित अस्पष्टता का परिचय दे सकते हैं। | ||
* पहचानकर्ताओं के समूहों पर कंपाउंड या क्वेरी-आधारित संचालन, नामस्थानों के आधार पर, जिसमें वे घोषित किए गए हैं, बोझिल या अक्षम्य हैं। | * पहचानकर्ताओं के समूहों पर कंपाउंड या क्वेरी-आधारित संचालन, नामस्थानों के आधार पर, जिसमें वे घोषित किए गए हैं, बोझिल या अक्षम्य हैं। | ||
Line 384: | Line 385: | ||
* [[लाइब्रेरी ऑफ कांग्रेस क्लासिफिकेशन]] | * [[लाइब्रेरी ऑफ कांग्रेस क्लासिफिकेशन]] | ||
* [[स्टार कैटलॉग]] और खगोलीय नामकरण परंपराएं | * [[स्टार कैटलॉग]] और खगोलीय नामकरण परंपराएं | ||
* [[एक्सएमएल नेमस्पेस]] | * [[एक्सएमएल नेमस्पेस|एक्सएमएल नामस्थान]] | ||
* [[तर्क-निर्भर नाम लुकअप]] | * [[तर्क-निर्भर नाम लुकअप]] | ||
Revision as of 08:30, 24 February 2023
कम्प्यूटिंग में, नामस्थान संकेतों (नामों) का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नामस्थान यह सुनिश्चित करता है कि दिए गए ऑब्जेक्ट्स के सभी सेट के अद्वितीय नाम हों ताकि उन्हें आसानी से पहचाना जा सकें।
अलग-अलग संदर्भों में नामों के पुन: उपयोग की अनुमति देने के लिए नामस्थानों को आमतौर पर पदानुक्रम के रूप में संरचित किया जाता है। सादृश्य के रूप में, लोगों के नामकरण की नृविज्ञान की प्रणाली पर विचार करें जहां प्रत्येक व्यक्ति का एक दिया गया नाम है, साथ ही परिवार का नाम उनके रिश्तेदारों के साथ साझा किया जाता है। यदि परिवार के सदस्यों के पहले नाम केवल प्रत्येक परिवार के भीतर अद्वितीय हैं, तो प्रत्येक व्यक्ति को पहले नाम और परिवार के नाम के संयोजन से विशिष्ट रूप से पहचाना जा सकता है; केवल जेन डो है, हालांकि कई जेन हो सकते हैं। डो परिवार के नाम स्थान के भीतर, सिर्फ जेन इस व्यक्ति को स्पष्ट रूप से नामित करने के लिए पर्याप्त है, जबकि सभी लोगों के वैश्विक नाम स्थान के भीतर, पूरा नाम इस्तेमाल किया जाना चाहिए।
नामस्थानों के प्रमुख उदाहरणों में फाइल सिस्टम शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।[1] कुछ प्रोग्रामिंग भाषा अपने वेरिएबल (कंप्यूटर साइंस) और सबरूटीन को नामस्थान में व्यवस्थित करती हैं।[2][3][4] कंप्यूटर नेटवर्क और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, वेबसाइट और रिमोट फाइल्स। वर्चुअलाइजेशन ओएस-स्तरीय वर्चुअलाइजेशन का समर्थन करने के लिए ऑपरेटिंग सिस्टम पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं।
इसी तरह, पदानुक्रमित (कंप्यूटिंग) फाइल सिस्टम फाइलों को निर्देशिकाओं में व्यवस्थित करते हैं। प्रत्येक निर्देशिका अलग नामस्थान है, ताकि निर्देशिका पत्र और चालान दोनों में जेन की फ़ाइल हो सकती है।
कंप्यूटर प्रोग्रामिंग में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं।
नेटवर्किंग में, डोमेन की नामांकन प्रणाली वेबसाइटों (और अन्य संसाधनों) को श्रेणीबद्ध नामस्थानों में व्यवस्थित करता है।
नाम विरोध
तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न एक्सएमएल अनुप्रयोगों से एक्सएमएल दस्तावेज़ों को मिलाने का प्रयास करते समय यह अक्सर विरोध का कारण बनता है।
इस एक्सएमएल में एचटीएमएल तालिका की जानकारी होती है:
<table>
<tr>
<td>Apples</td>
<td>Oranges</td>
</tr>
</table>
इस एक्सएमएल में तालिका (फर्नीचर) (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
यदि इन एक्सएमएल अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में <table>...</table>
तत्व होता हैं, लेकिन तत्वों की सामग्री और अर्थ भिन्न होते हैं।
एक्सएमएल पार्सर को यह नहीं पता होगा कि इन अंतरों को कैसे नियंत्रित किया जाए।
उपसर्ग के माध्यम से समाधान
एक्सएमएल में नाम के विरोध को नाम उपसर्ग के प्रयोग से आसानी से टाला जा सकता है।
निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।
<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>
जब स्थानीय नामों का स्वयं उपयोग किया जाता है, तो नाम संकल्प (प्रोग्रामिंग भाषा) का उपयोग यह तय करने के लिए किया जाता है कि कौन सा (यदि कोई है) विशेष नाम किसी विशेष स्थानीय नाम से संकेतित है।
उदाहरण
संदर्भ | नाम | नामस्थान नाम | स्थानीय नाम |
---|---|---|---|
पथ | /home/user/readme.txt | /home/user (directory) | readme.txt (file name) |
डोमेन नाम | www.example.com | example.com (domain name) | www (leaf domain name) |
सी ++ | std::array | std (C++ namespace) | array (struct) |
यूएन/लोकोड | US NYC | US (country or territory) | NYC (locality) |
एक्सएमएल | xmlns:xhtml="http://www.w3.org/1999/xhtml" <xhtml:body> |
xhtml (previously declared XML namespace xhtml="http://www.w3.org/1999/xhtml") | body (element) |
पर्ल | $DBI::errstr | $DBI (Perl module) | errstr (variable) |
जावा | java.util.Date | java.util (Java namespace) | Date (class) |
समान संसाधन का नाम (यूआरएन) | urn:nbn:fi-fe19991055 | urn:nbn (National Bibliography Numbers) | fi-fe19991055 |
संचलन प्रणाली | 10.1000/182 | 10 (handle naming authority) | 1000/182 (handle local name) |
डिजिटल ऑब्जेक्ट पहचानकर्ता | 10.1000/182 | 10.1000 (publisher) | 182 (publication) |
मैक पता | 01-23-45-67-89-ab | 01-23-45 (organizationally unique identifier) | 67-89-ab (NIC specific) |
पीसीआई आईडी | 1234 abcd | 1234 (vendor ID) | abcd (device ID) |
यूएसबी वीआईडी/पीआईडी | 2341 003f[7] | 2341 (vendor ID) | 003f (product ID) |
स्पार्कल | dbr:Sydney | dbr (previously declared ontology, e.g. by specifying @prefix dbr: <http://dbpedia.org/resource/>) | Sydney |
प्रतिनिधिमंडल
वर्ल्ड वाइड वेब की संरचना जैसे वास्तविक दुनिया के अनुप्रयोगों में पार्टियों के बीच जिम्मेदारियों का प्रत्यायोजन महत्वपूर्ण है। नामस्थान वैश्विक विशिष्टता को बनाए रखते हुए कई नाम जारी करने वाले संगठनों को पहचानकर्ता असाइनमेंट सौंपने की अनुमति देते हैं।[8] केंद्रीय पंजीकरण प्राधिकरण राष्ट्रीय इंटरनेट रजिस्ट्री को पंजीकृत करता है। प्रत्येक नेमस्पेस नाम एक संगठन को आवंटित किया जाता है जो बाद में उनके आवंटित नेमस्पेस में नामों के असाइनमेंट के लिए जिम्मेदार होता है। यह संगठन एक नाम जारी करने वाला संगठन हो सकता है जो स्वयं मेटाडेटा रजिस्ट्री करता है,या किसी अन्य पंजीकरण प्राधिकरण को नाम निर्दिष्ट करता है जो आगे उनके नामस्थान के कुछ हिस्सों को विभिन्न संगठनों को सौंपता है।
पदानुक्रम
नामकरण योजना जो तृतीय पक्षों को नामस्थानों के उप-प्रत्यायोजन की अनुमति देती है, श्रेणीबद्ध नामस्थान है।
पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण डोमेन नाम है।
गैर-पुनरावर्ती पदानुक्रम का उदाहरण समान संसाधन का नाम है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी (आईएएनए) नंबर का प्रतिनिधित्व करता है।
लेखागार | पंजीकरण | उदाहरण पहचानकर्ता | नामस्थान नाम | नाम स्थान |
---|---|---|---|---|
समान संसाधन का नाम (यूआरएन) | इंटरनेट निरुपित नंबर प्राधिकरण | urn:isbn:978-3-16-148410-0 | यूआरएन | औपचारिक यूआरएन नामस्थान |
औपचारिक यूआरएन नामस्थान | इंटरनेट निरुपित नंबर प्राधिकरण | urn:isbn:978-3-16-148410-0 | (आईएसबीएन) | यूनिफ़ॉर्म रिसोर्स नाम के रूप में अंतर्राष्ट्रीय मानक बुक नंबर |
अंतर्राष्ट्रीय अनुच्छेद संख्या (ईएएन) | जीएस1 | 978-3-16-148410-0 | 978 | बुकलैंड |
अंतर्राष्ट्रीय मानक पुस्तक संख्या (आईएसबीएन) | अंतर्राष्ट्रीय आईएसबीएन एजेंसी | 3-16-148410-X | 3 | जर्मन भाषी देश |
जर्मन प्रकाशक कोड | एजेंट फर बुचमार्क मानक | 3-16-148410-X | 16 | मोहर सीबेक |
नामस्थान बनाम स्कोप
नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास।
नामस्थान के बिना | एक नामस्थान के साथ | |
---|---|---|
स्थानीय दायरा | वाहन पंजीकरण प्लेट | फाइलसिस्टम पदानुक्रम मानक |
वैश्विक कार्यक्षेत्र | सार्वभौमिक अद्वितीय पहचानकर्ता | डोमेन नाम प्रणाली |
प्रोग्रामिंग भाषाओं में
कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, नामस्थान का उदाहरण पदानुक्रमित है। निर्देशिका में प्रत्येक नाम विशिष्ट रूप से फ़ाइल या उपनिर्देशिका की पहचान करता है।[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 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी नामस्थान के रूप में कार्य करती है। यह ही पहचानकर्ता के लिए प्रत्येक नामस्थान में अलग व्यक्ति की पहचान करने में समस्या पैदा नहीं करता है।
बड़े कंप्यूटर प्रोग्राम या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #अनुसरण नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक प्रतिरूपकता (प्रोग्रामिंग) बन जाता है।
डेटा भण्डारण उपकरण और कई आधुनिक प्रोग्रामिंग भाषाएं नामस्थानों का समर्थन करती हैं। भण्डारण उपकरण निर्देशिकाओं (या फ़ोल्डर्स) को नामस्थान के रूप में उपयोग करते हैं। यह दो फ़ाइलों को ही नाम के साथ उपकरण पर संग्रहीत करने की अनुमति देता है जब तक कि वे अलग-अलग निर्देशिकाओं में संग्रहीत हों। पायथन (प्रोग्रामिंग भाषा) (जैसे 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
पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है।
जावा
जावा (प्रोग्रामिंग भाषा) में, नामस्थान का विचार जावा पैकेज में सन्निहित है। सभी कोड पैकेज के अंतर्गत आते हैं, हालाँकि उस पैकेज को स्पष्ट रूप से नाम देने की आवश्यकता नहीं है। उदाहरण के लिए उपयुक्त पहचानकर्ता से पहले पैकेज नाम को उपसर्ग करके अन्य पैकेजों से कोड का उपयोग किया जाता है, उदाहरण के लिए package java.lang
में class String
को 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 ...
स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना अभिगम किया जा सकता है:
# 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 के बाद से पीएचपी में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
पीएचपी में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।
# 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';
}
}
हम निम्नलिखित विभिन्न तरीकों से पीएचपी नामस्थान का संदर्भ दे सकते हैं:
# 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();
नामस्थानों का अनुकरण asasasa
नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, पहचानकर्ता नामकरण सम्मेलन का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि libpng अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:
png_create_write_struct
png_get_signature
png_read_row
png_set_invalid
यह नामकरण प्रथा (प्रोग्रामिंग) उचित आश्वासन प्रदान करती है कि पहचानकर्ता अद्वितीय हैं और इसलिए बड़े कार्यक्रमों में टकराव के नामकरण के बिना उपयोग किया जा सकता है।[15] इसी तरह, मूल रूप से फोरट्रान (जैसे, BLAS, LAPACK) में लिखे गए कई पैकेज किसी फ़ंक्शन के नाम के पहले कुछ अक्षरों को यह इंगित करने के लिए आरक्षित करते हैं कि यह किस समूह से संबंधित है।
इस तकनीक में कई कमियां हैं:
- यह नेस्टेड नामस्थान के लिए अच्छी तरह से स्केल नहीं करता है; पहचानकर्ता अत्यधिक लंबे हो जाते हैं क्योंकि पहचानकर्ताओं के सभी उपयोग पूरी तरह से योग्य नाम | पूरी तरह से नामस्थान-योग्य होने चाहिए।
- व्यक्ति या संगठन असंगत नामकरण परंपराओं का उपयोग कर सकते हैं, संभावित रूप से अवांछित अस्पष्टता का परिचय दे सकते हैं।
- पहचानकर्ताओं के समूहों पर कंपाउंड या क्वेरी-आधारित संचालन, नामस्थानों के आधार पर, जिसमें वे घोषित किए गए हैं, बोझिल या अक्षम्य हैं।
- प्रतिबंधित पहचानकर्ता लंबाई वाली भाषाओं में, उपसर्गों का उपयोग उन वर्णों की संख्या को सीमित करता है जिनका उपयोग यह पहचानने के लिए किया जा सकता है कि फ़ंक्शन क्या करता है। मूल रूप से फोरट्रान में लिखे गए पैकेजों के लिए यह विशेष समस्या है, जो प्रति पहचानकर्ता केवल 6 वर्णों की पेशकश करता है। उदाहरण के लिए, BLAS फ़ंक्शन का नाम
DGEMM
फ़ंक्शन इंगित करता है कि यह डबल-परिशुद्धता संख्या (डी) और सामान्य मैट्रिक्स (जीई) पर संचालित होता है, और केवल अंतिम दो अक्षर दिखाते हैं कि यह वास्तव में क्या करता है: मैट्रिक्स-मैट्रिक्स गुणन (एमएम)।
कई फायदे हैं:
- स्रोत-कोड फ़ाइलों में नामों का पता लगाने के लिए किसी विशेष सॉफ़्टवेयर टूल की आवश्यकता नहीं होती है। पकड़ की तरह साधारण कार्यक्रम पर्याप्त है।
- कोई नामस्थान नाम विरोध नहीं है।
- नाम-परेशान करने की कोई आवश्यकता नहीं है, और इस प्रकार संभावित असंगति की कोई समस्या नहीं है।
यह भी देखें
- 11 अंकों का वितरण बिंदु ज़िप कोड
- द्विपद नामकरण (जीव विज्ञान में जीनस-प्रजातियां)
- रासायनिक नामकरण
- डेवी दशमलव वर्गीकरण
- डिजिटल ऑब्जेक्ट पहचानकर्ता
- डोमेन की नामांकन प्रणाली
- पहचान (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
- लाइब्रेरी ऑफ कांग्रेस क्लासिफिकेशन
- स्टार कैटलॉग और खगोलीय नामकरण परंपराएं
- एक्सएमएल नामस्थान
- तर्क-निर्भर नाम लुकअप
संदर्भ
- ↑ 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.
- ↑ "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.
- ↑ "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.
- ↑ "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] - ↑ XML Core Working Group (8 December 2009). "Namespaces in XML 1.0 (Third Edition)". W3C. Retrieved 2012-03-30.
- ↑ Moats, Ryan (May 1997). "Syntax". URN Syntax. IETF. p. 1. sec. 2. doi:10.17487/RFC2141. RFC 2141. Retrieved 2012-03-30.
- ↑ Stephen J. Gowdy. "List of USB ID's". 2013.
- ↑ 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.
- ↑ "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.
- ↑ "A namespace is "a logical grouping of the names used within a program."". Webopedia.com. 10 April 2002. Retrieved 2011-07-26.
- ↑ "Namespaces allow to group entities like classes, objects and functions under a name". Cplusplus.com. Retrieved 2011-07-26.
- ↑ "6. Modules". The Python Tutorial. Python Software Foundation. Retrieved 25 October 2010.
- ↑ "Python Scopes and Namespaces". Docs.python.org. Retrieved 2011-07-26.
- ↑ https://docs.python.org/3/tutorial/modules.html "in general the practice of importing * from a module or package is frowned upon"
- ↑ Danny Kalev. "Why I Hate Namespaces". Archived from the original on 2016-07-09.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)