नेमस्पेस / पैकेज के गुण


14

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

जवाबों:


16

नहीं कर रहे हैं उपसर्गों नाम के रूप में एक ही बात नेमस्पेसिंग , सिवाय इसके कि यह एक तरीका है कि कम उपयोगी और अधिक कठिन / पार्स को पढ़ने के लिए है में किया गया है? क्या सवाल ही जवाब नहीं है?


किसी पहचानकर्ता के नाम की शुरुआत में सिर्फ एक उपसर्ग लगाना नामस्थान जैसी भाषा की सुविधा का उपयोग करने के समान नहीं है। उदाहरण के लिए, C ++ में, आप कह सकते हैं कि आप usingएक विशेष नामस्थान हैं और फिर उस नामस्थान में पहचानकर्ताओं की शुरुआत में उपसर्ग नहीं लगाना है।
कॉम्पैन

2
@ user9521 - यह मेरी बात है ...
निकोल

+1 नामस्थानों का एक बड़ा लाभ यह है कि आप उपसर्ग को तब छोड़ सकते हैं / छोड़ सकते हैं जब इसकी आवश्यकता न हो - नामस्थान में जहाँ निर्दिष्ट विशेष चीज को परिभाषित किया गया हो using, इसके द्वारा import xxxxxxxxx as yyy, आदि

1
चूँकि अधिकांश प्रोग्रामर आलसी होते हैं, तो क्या आप इसकी घोषणा करेंगे using SDL;या SDL_*सभी जगह टाइप करना होगा?
बेरिन लोरिट्श

2
+1, लेकिन मुझे लगता है कि आपका वास्तव में मतलब था "कम उपयोगी, पढ़ने में अधिक कठिन, और संकलक द्वारा सत्यापित नहीं।"
लैरी कोलमैन

5

अधिकांश (सभी?) नामस्थान वाली भाषाएं ऑब्जेक्ट ओरिएंटेड होती हैं। कई बार एक मानव पठनीय नाम एक प्रकार के लिए उपयुक्त होता है, भले ही कई असंगत कार्यान्वयन हों। (यह वस्तु उन्मुख पुन: उपयोग पर अन्य मुद्दों को लाता है, लेकिन यह सवाल यह नहीं है)। उदाहरण के लिए, जावा में आपके पास एक टाइमर है जो पृष्ठभूमि UI कार्यों के लिए उपयोग किया जाता है, और एक टाइमर जो पृष्ठभूमि अनुप्रयोग के लिए उपयोग किया जाता है (AWT / स्विंग से बंधा हुआ नहीं) कार्य। नामस्थान आपको अलग-अलग उप-एपीआई में रहने वाली इन समान नाम वाली वस्तुओं को रखने की अनुमति देता है।

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

प्रीफ़िक्सिंग बहुत गड़बड़ हो सकती है। आप इसे कब लागू करते हैं? आप इसे कब लागू नहीं करते हैं ? क्या संरचनाएं / कक्षाएं / वैश्विक तरीके उपसर्ग प्राप्त करते हैं? तरीकों के बारे में क्या? संरचना में गुणों के बारे में क्या। मैंने इन सभी चीजों को कोड में देखा है, हालांकि धन्यवाद एक बार में नहीं। Namespaces इन सभी सवालों के लिए कुछ पूर्वानुमान प्रदान करता है, और इसे एक व्यक्तिगत "सर्वोत्तम अभ्यास" के बजाय एक भाषा सुविधा बनाता है।


हास्केल में नेमस्पेस (मॉड्यूल) हैं और यह ऑब्जेक्ट ओरिएंटेड नहीं है।
जेरेमी हेइलर

3

मुझे लगता है कि नाम स्थान एक महान विचार हैं। वे एक नाम के दायरे को सीमित करके टकराव को रोकने में मदद करते हैं। जावा पैकेज में, सुझाया गया पैकेज नामकरण सम्मेलन डोमेन नामों पर आधारित है, जो अद्वितीय होना चाहिए, जो कस्टम लाइब्रेरी पर नामकरण संघर्ष को रोकने में मदद करते हैं। कुल मिलाकर, वे व्यापक अर्थों में नामकरण को कुछ अधिक अद्वितीय बनाते हैं, जबकि अभी भी प्रोग्रामर को कुछ अस्पष्ट नामकरण सम्मेलन का पालन किए बिना अपने टुकड़ों के नामकरण में एक अच्छी बिट अधिक स्वतंत्रता की अनुमति देता है।


1
हालांकि, जावा के विशिष्ट सम्मेलन के मामले में, हर किसी के पास एक वेबसाइट नहीं है। इसके अलावा, यदि आप कभी भी अपने प्रोग्राम को एक वेबसाइट से दूसरी वेबसाइट (जैसे सोर्सफोर्ज टू गितुब) में स्थानांतरित करते हैं, तो यह समझ में आता है लेकिन यदि अन्य चीजें आपके कोड पर निर्भर करती हैं तो पैकेज बदलने में असुविधा होगी।
कॉम्पैन

1
जावा का कन्वेंशन आपके संगठन पर लागू होता है, न कि उस स्थान पर जहाँ यह होस्ट किया गया है। आप बस अपने आप को एक संगठन घोषित कर सकते हैं और इसके साथ किया जा सकता है। उन URL की भी समस्या है जो वर्णों को अनुमति देते हैं जिनका उपयोग पैकेज नामों में नहीं किया जा सकता है। लेकिन हम वहां नहीं जाएंगे। तो आपके लिए, बस अपने पैकेज के नाम के रूप में "me.user9521" का उपयोग करें और आप सेट हैं।
बेरिन लोरिट्श

1
सम्मेलन वेब नामों के बारे में नहीं है, बल्कि डोमेन नामों के बारे में है। आपके पास एक वेबसाइट के बिना एक डोमेन हो सकता है।
डेविड थॉर्नले

1

नाम संघर्ष से बचने के लिए नाम स्थान / मॉड्यूल / पैकेज उपयोगी हैं। तो नाम प्रीफ़िक्सिंग है लेकिन नामस्थानों में मौजूदा नामस्थान में प्रतीकों को आयात करने में सक्षम होने की अतिरिक्त सुविधा है ताकि आपको पूरे नामस्थान :: * के साथ परेशान न होना पड़े।

कुछ भाषाएं (जैसे पायथन) आपको अपने वर्तमान मॉड्यूल में केवल विशिष्ट प्रतीकों को आयात करने या एक अलग नाम के रूप में प्रतीकों को आयात करने की अनुमति देकर इस क्षमता का विस्तार करती हैं। यह उपयोगी है यदि आप केवल कुछ वर्गों / कार्यों / स्थिरांक में रुचि रखते हैं या यदि आपके नामस्थान में प्रतीकों के साथ कुछ प्रतीक संघर्ष करते हैं लेकिन कुछ नहीं करते हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.