मानक और उपयोगकर्ता-परिभाषित प्रकारों के बीच एक वाक्यात्मक अंतर बनाने की बात क्या है?


13

यद्यपि यहाँ मैं विशेष रूप से C ++ और Bjarne Stroustrup के नामकरण सम्मेलनों का उल्लेख करूँगा , सिद्धांत रूप में, मैंने देखा है कि लोग यहाँ और वहाँ अन्य भाषाओं के लिए कुछ समान नियमों का उपयोग करते हैं।

तो, मूल विचार यह है कि किसी को कोड को पढ़ते समय उपयोगकर्ता-परिभाषित प्रकारों से मानक प्रकारों को अलग करने में सक्षम होना चाहिए । उदाहरण के लिए, बज़्ने स्ट्रॉस्ट्रुप का सुझाव है कि एक का उपयोग करता है

प्रकारों के लिए एक प्रारंभिक पूंजी पत्र (जैसे, वर्ग और ग्राफ़)

जो, उस खाते में ले रहा है

C ++ भाषा और मानक पुस्तकालय बड़े अक्षरों का उपयोग नहीं करते हैं

उपरोक्त उल्लिखित लक्ष्य को प्राप्त करने की अनुमति देता है।

लेकिन हमें ऐसा करने की आवश्यकता क्यों है? मानक और उपयोगकर्ता-परिभाषित प्रकारों को अलग करने का उद्देश्य क्या हो सकता है?

मुझे उस मामले पर किसी भी ब्रेज़ेन स्ट्रॉस्ट्रुप का तर्क नहीं मिला, और इसके अलावा, मैं खुद को बिल्कुल विपरीत तरीके से सोचता हूं। : मुझे पता है, मुझे पता है, "मैं कौन हूँ स्ट्रॉस्ट्रुप विवाद करने के लिए?" लेकिन, सुनो, सी ++ भाषा सुविधाओं का एक गुच्छा, जैसे ऑपरेटर ओवरलोडिंग, उपयोगकर्ता-परिभाषित प्रकारों को मानक प्रकारों के समान सिंटैक्टिक समर्थन के समान स्तर की अनुमति देने के उद्देश्य से सेवा करता है। और फिर यह सब एक अलग नामकरण अनुशासन से चकित है ...

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


6
अंत में आप इसे हंगेरियन नोटेशन का एक रूप भी कह सकते हैं (यानी नाम में टाइप / उपयोग के बारे में जानकारी एम्बेड करना), जो आमतौर पर पर आधारित है। इसलिए: अच्छा सवाल है।
19

2
@stijn: हाँ, लेकिन क्या आप जानते हैं कि यह क्यों पर आधारित है? दिन में वापस, जब सभी ने अपने कार्यक्रमों को लिखने के लिए एक पाठ संपादक का उपयोग किया, तो पहचानकर्ता को देखकर प्रकार जानना उपयोगी था। लेकिन आज, आप किसी भी आधुनिक आईडीई में पहचानकर्ता के ऊपर मंडरा सकते हैं और यह आपको प्रकार बताएगा।
रॉबर्ट हार्वे

4
@RobertHarvey को छोड़कर कि हंगेरियन नोटेशन उन समुदायों में भी बचा है जिनके पास शक्तिशाली आईडीई नहीं है, या बल्कि, ज्यादातर सादे पाठ संपादकों का उपयोग करते हैं।

1
@ रोबर्टह्वे नो, मैं दोनों ("हंगेरियन एप्स" और "सिस्टम हंगेरियन") से अवगत हूं, और मेरे अनुभव में न तो आम है, उदाहरण के लिए, पायथन और रस्ट।

3
@RobertHarvey क्या आप कह रहे हैं कि हंगेरियन अंकन केवल C, C ++ और VB में ही मौजूद है? इसके बावजूद, मेरी बात यह थी कि आप जिस कारण से इसे देते हैं, उस पर सवाल उठाएं (क्योंकि यह केवल तभी से बेमानी है क्योंकि हमारे पास आईडीई है जो आपको टाइप बताता है) क्योंकि यह कारण ऐसी भाषाओं पर लागू नहीं होता है जिनके पास ऐसी आईडी नहीं है और, अपने तर्क से, हंगरी से लाभ उठाना चाहिए। उस पायथन को गतिशील रूप से टाइप किया गया है, इससे कोई फर्क नहीं पड़ता, वास्तव में इसे तर्क को बढ़ाना चाहिए क्योंकि आमतौर पर प्रोग्रामर को कोड लिखते समय प्रकार पता होता है, लेकिन वे स्वचालित रूप से अनुमान नहीं लगा सकते हैं।

जवाबों:


5

ऐसे में कोई उद्देश्य या लाभ नहीं है। C ++ का एक लक्ष्य UDTs और प्राइमेटिव्स का परस्पर व्यवहार करना था, और जब तक वे पूरी तरह से सफल नहीं हो जाते, यह एक ऐसा क्षेत्र है जहाँ आपको अंतर करने की आवश्यकता नहीं है।

जब नामकरण की बात आती है, स्ट्रॉस्ट्रुप पागल है, और यह एक वैज्ञानिक रूप से सिद्ध तथ्य है।


2
मैं आपका RAII देखूंगा, और आपको एक SFINAE बढ़ा दूंगा।
रॉबर्ट हार्वे

5
मैं देख सकता था कि यूडीटी से मानक प्रकारों को अलग करने के लिए यह कैसे उपयोगी हो सकता है। जब तक आपके पास वास्तव में अच्छा कारण न हो, आपको मानक लाइब्रेरी में कोड नहीं बदलना चाहिए , इसलिए निचले मामले को देखना यह दर्शाता है कि आपको कोड देखने की जरूरत नहीं है क्योंकि, ठीक है, यह मानक पुस्तकालय में है।
रॉबर्ट हार्वे

4
@ डेलन: हाँ। यह "कई लोगों" की ओर से प्राधिकरण की अपील के अलावा और कुछ नहीं है। यदि "बहुत से लोग" यहां से निकलना चाहते हैं और उनके तर्क पर चर्चा करते हैं, तो वे ऐसा करने के लिए स्वतंत्र हैं, और तब तक, उनके पास जोड़ने के लिए कुछ भी नहीं है। FTR, मैं UDTs के लिए भी अपरकेस का उपयोग करता हूं ... लेकिन जब भी मुझे उन्हें उर्फ ​​करने की आवश्यकता होती है, तो प्राइमेटिव्स के लिए भी।
डेडएमजी

2
@RobertHarvey: यह मानता है कि आप मानक प्रकार को पहचान नहीं सकते। या अपने वातावरण में उन पर mousing और "std ::" देखकर। या गो टू डेफिनिशन या जो भी हो का उपयोग करके। इसलिए मूल रूप से, यह लागू नहीं होता है।
डेडएमजी

1
मैंने हमेशा सोचा था कि उद्देश्य मानक प्रकार से अलग करना था, नामस्थानों के आगमन से पहले। आजकल, यह पुरानी सोच का एक अवशेष (एक "सर्वोत्तम अभ्यास" है जो कुछ समय पहले सबसे अच्छा होना बंद हो गया है)। एफडब्ल्यूआईडब्ल्यू, मेरी व्यक्तिगत परियोजनाओं में, मैं snake_caseअपनी कक्षाओं और नामस्थानों के लिए छोटे अक्षरों का उपयोग करता हूं और इसमें अभी तक कोई समस्या नहीं है - या भ्रम -।
utnapistim 12

3

नामकरण सम्मेलनों का समर्थन मानव (अर्थात प्रोग्रामर और अनुरक्षक) कोड की समझ के बारे में है।

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

इस तरह के संकेत (टिप्पणियाँ, डिजाइन विनिर्देशों, आदि) प्रदान करने के कई तरीके हैं। सम्मेलनों के नामकरण का लाभ यह है कि वे कोड में मौजूद हैं, जबकि टिप्पणियां छोड़ी जा सकती हैं, तारीख से बाहर, आदि।


2

एक कारण है कि मैं प्रकारों के लिए बड़े अक्षरों का उपयोग करता हूं, तो चर को प्रकारों से अलग करना है। यह एक ही नाम के अलावा, एक चर घोषित करने की अनुमति देता है:

Foo foo;
Graph graph;

यह उन वर्गों के लिए उपयोगी हो सकता है जिनमें से प्रत्येक संदर्भ में केवल एक उदाहरण का उपयोग किया जाता है, जैसे कॉन्फ़िगरेशन सेटिंग्स।


IMHO यह हेडिंग में सवाल का जवाब नहीं देता है। शायद "इस संबंध में, छोटे अक्षरों के साथ मानक प्रकारों का नामकरण केवल cstdlib के साथ पीछे की संगतता के लिए था"।
वोरैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.