एक आदिम डेटा प्रकार से क्या मतलब है?


42

एक आदिम डेटाटाइप की मेरी समझ यह है

यह अनुमानित रूप से एक भाषा द्वारा प्रदान किया गया एक डेटाटाइप है (अन्य उपयोगकर्ता परिभाषित वर्ग हैं)

इसलिए अलग-अलग भाषाओं में डेटाटिप्स के अलग-अलग सेट होते हैं जिन्हें उस विशेष भाषा के लिए आदिम माना जाता है। क्या वह सही है?

और "बुनियादी डेटाटाइप" और "अंतर्निहित डेटाटाइप" के बीच अंतर क्या है। विकिपीडिया का कहना है कि एक आदिम डेटाटाइप दोनों में से एक है।

PS - क्यों "स्ट्रिंग" प्रकार को SNOBOL4 में एक आदिम प्रकार माना जाता है और जावा में नहीं?

जवाबों:


34

यह भाषा पर निर्भर करता है।

- उदाहरण के लिए, सी और सी जैसी भाषाओं में ++, आप में निर्मित अदिश प्रकार की एक संख्या है int, float, double, char, आदि ये "आदिम" अर्थ में हैं कि वे सरल घटकों में विघटित नहीं किया जा सकता। इन मूल प्रकारों से आप नए प्रकारों को परिभाषित कर सकते हैं - सूचक प्रकार, सरणी प्रकार, संरचना प्रकार, संघ प्रकार, आदि।

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

संपादित करें

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

फिर, ये अवधारणाएं थोड़ी अस्पष्ट हैं, और यह वास्तव में संदर्भ पर निर्भर करता है। उदाहरण के लिए, एक "बिल्ट-इन" प्रकार की धारणा BLISS जैसी टाइपलेस भाषा के लिए अर्थहीन है।


व्हाट्सएप में बेसिक और बिल्ट के बीच अंतर क्या है?
15:99 बजे jsp99

1
"स्ट्रिंग" जावा में एक आदिम डेटाटाइप है ?? (मैंने जेस्पर के जवाब में डेलन की टिप्पणी देखी है)। मैं आपकी राय जानना चाहता हूं, क्योंकि आपकी एक टिप्पणी में आपने कहा था कि "आदिम प्रकार आप पर निर्भर करता है कि आप किससे पूछते हैं"।
jsp99

@Appy - संपादित देखें।
जॉन बोड

3
जावा में @Appy स्ट्रिंग आदिम नहीं है क्योंकि यह एक यौगिक प्रकार है। यदि आप स्ट्रिंग क्लास सोर्स कोड (JDK फ़ोल्डर में src.zip) को देखते हैं, तो आप देखेंगे कि आंतरिक रूप से स्ट्रिंग को वर्णों के एक सरणी के रूप में दर्शाया गया है। तो आप स्ट्रिंग को अलग-अलग पात्रों में विघटित कर सकते हैं। आप छोटे मूल्यों में चरित्र को विघटित नहीं कर सकते हैं जो charएक आदिम प्रकार और Stringएक यौगिक प्रकार बनाता है ।
जसक प्रूशिया

2
@ आप बात याद कर रहे हैं। SNOBOL4 तार विघटित नहीं किया जा सकता है। जावा स्ट्रिंग्स कर सकते हैं। फर्क पड़ता है। दोनों में निर्मित हैं, लेकिन केवल SNOBOL4 तार आदिम हैं।
रिग

19

से जावा परिप्रेक्ष्य:

जावा में, आदिम और गैर-आदिम प्रकारों के बीच बहुत स्पष्ट अंतर है।

एक आदिम प्रकार के एक चर में सीधे उस प्रकार का मूल्य होता है (दूसरे शब्दों में, वे मूल्य प्रकार हैं )।

एक गैर-आदिम प्रकार के एक चर में सीधे मूल्य नहीं होता है; इसके बजाय, यह एक वस्तु के लिए एक संदर्भ (एक संकेतक के समान) है। (उपयोगकर्ता-परिभाषित मूल्य प्रकार बनाने के लिए जावा में संभव नहीं है)।

जावा आठ आदिम प्रकार है: byte, short, int, long, char, boolean, floatऔर double। कुछ भी एक गैर-आदिम प्रकार है।


तो स्ट्रिंग डेटाटाइप जावा में गैर-आदिम है। प्रत्येक जावा मुख्य () कार्यक्रम में हम "सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग आर्ग्स [])" लिखते हैं। क्यों? क्यों हम हमेशा मुख्य में एक स्ट्रिंग तर्क पारित करने के लिए है? इसके अलावा, हमें कभी भी स्ट्रिंग प्रकार को जावा में आयात करने की आवश्यकता नहीं होती है जिस तरह से हम इसे C / C ++ (जैसे। #Include <string> या std :: string) का उपयोग करके शामिल करते हैं। कृपया समझाएँ।
मैक्सवुड

7
@Maxood String करता भाषा में विशेष दर्जा है (यह शाब्दिक हो जाता है, इसके बारे में हस्ताक्षर में है main, वहाँ होना शामिल है जो मुझे लगता है स्पष्ट रूप से JLS द्वारा अनुमति दी है, यह उपलब्ध स्वतः, आदि है) लेकिन यह एक नहीं है आदिम डेटा प्रकार। कोई इसे बिल्ट-इन कह सकता है

@ जैस्पर क्यों काम करने के लिए आदिम प्रकार तेज होते हैं? सिर्फ इस तथ्य के कारण कि उनके पास अतिरिक्त रैपिंग नॉन-प्राइमेटिक्स नहीं है? मैं आदिम और गैर-आदिम के बीच अंतर का पता लगाने की कोशिश कर रहा हूं ... जैसा कि सीपीयू या कुछ में बनाया गया है?
अब्दुल

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

1
@ अब्दुल इसे बहुत जटिल मत बनाओ। सीपीयू में कई रजिस्टर होते हैं, जिनमें विभिन्न प्रकार के आदिम मूल्य हो सकते हैं (उदाहरण के लिए 32-बिट या 64-बिट पूर्णांक या एकल या डबल सटीक फ़्लोटिंग पॉइंट नंबर) और सीपीयू ने हार्डवेयर पर कार्य करने के लिए निर्देश दिए हैं। रजिस्टरों में मूल्य। आपकी अंतिम टिप्पणी अनिवार्य रूप से सही है।
जेसपर

9

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

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


धन्यवाद :) आपका उत्तर बहुत जानकारीपूर्ण है, लेकिन मैं स्पष्ट रूप से समझने में असमर्थ हूं। आप कुछ उदाहरण देते हैं (शायद C / C ++ / Java के साथ)।
jsp99

@ मेसन व्हीलर यह वह जगह है जहां हम ढीले टाइपिंग और मजबूत टाइपिंग शब्द का उपयोग करते हैं। जैसा कि मैंने लोगों को यह कहते हुए सुना है कि VB एक शिथिल टाइप की भाषा है जबकि Java एक जोरदार टाइप्ड है। कृपया पुष्टि करें।
मैक्सुड

3
@ एप सी + + तार, वैक्टर और नक्शे के लिए कक्षाओं के साथ जहाज। ये बिल्ट-इन हैं, जो भाषा के साथ आते हैं, भाषा की परिभाषा आदि में हैं। हालांकि इन्हें C ++ में लिखा जाता है, जो वे मानक पुस्तकालय से आते हैं। आप अपना खुद का लिख ​​सकते हैं जो पहचान के साथ व्यवहार करता है। इसकी तुलना इंट या चार से करें। आप C ++ में अपने स्वयं के चार को परिभाषित नहीं कर सकते। आप प्रत्येक ऑपरेटर को एक वर्ग पर अधिभारित कर सकते हैं और कुछ ऐसा प्राप्त कर सकते हैं जो समान व्यवहार करता है लेकिन पहचान नहीं है। यह एक आदिम है। मूल रूप से एक भाषा में कुछ परिभाषित किया गया है जो उस भाषा में लागू नहीं है।
स्टोनमेटल

5

"स्ट्रिंग" प्रकार को SNOBOL4 में एक आदिम प्रकार माना जाता है और जावा में क्यों नहीं?

क्योंकि जावा भाषा की विशिष्टता बहुत स्पष्ट रूप Stringसे बताती है कि जावा के संदर्भ में "आदिम" शब्द का क्या अर्थ है, और जावा इस विनिर्देश के अनुरूप नहीं है, जबकि SNOBOL4 भाषा विनिर्देश परिभाषित करता है कि SNOBOL4 और SNOBOL4 के संदर्भ में "आदिम" का क्या अर्थ है उस विनिर्देश के अनुरूप है।

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


@ मित्तग आपके उत्तर के आधार पर, मैंने कुछ वाक्यांशों को गुमराह किया और एक बहुत अच्छी लिंक पर आया जो इस विशेष विषय पर सभी संदेहों को दूर करता है :)।
jsp99

0

एक 'आदिम' डेटा प्रकार का अर्थ है कि आपके पास स्मृति में संग्रहीत मान है - इस मान की कोई विधियाँ या आंतरिक संरचना नहीं है। एक आदिम केवल बाहरी संचालन द्वारा संचालित किया जा सकता है।

जावा में, आदिम संख्याएँ हैं (int, long, etc.) और char। http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

यदि आपके मूल्य में संरचना है (मैं यहां स्ट्रट्स के बारे में सोच रहा हूं) तो यह एक आदिम नहीं है। यदि इसकी विधियाँ (कोई वस्तु या वर्ग) हैं तो यह एक आदिम नहीं है।


2
सी # के आदिम intडेटा प्रकार करता है तरीकों है ...
Heinzi

क्या आप एक उदाहरण दे सकते हैं?
जोशराज

var myString = 3.ToString();( Int32.ToString () देखें )। ध्यान दें कि intसी # एक है में पर्याय के लिए Int32, यानी, Int32 है एक आदिम प्रकार (जावा, जहां विपरीत Integerसे अलग है int)। इस प्रकार, 3.ToString()C # में बॉक्सिंग शामिल नहीं है!
हेनजी

यह तो बहुत ही मज़ेदार है; आपके द्वारा प्रदान किया गया लिंक बताता है कि 'int' वास्तव में वर्ग 'Int32' (या शायद आदिम और एक आवरण वर्ग का एक संयोजन है) का एक उद्देश्य है, इसलिए मैंने जो परिभाषा दी है: 'int' एक आदिम नहीं है। :)
जोशराज

1
@barlop: जावा C ++ से नहीं उतरा है। अगर हर्बर्ट शिल्ड्ट को भी इतना आसान तथ्य नहीं मिलता है, तो मुझे यकीन नहीं है कि मैं बाकी किताबों पर भी भरोसा करूंगा। जावा के मूल डिजाइनर पैट्रिक नॉटन एक बहुत बड़े उद्देश्य-सी प्रशंसक थे। वास्तव में, उन्होंने पहले ही NeXT में ऑब्जेक्टिव-सी पर काम करने का नोटिस दिया था, जब स्कॉट मैकनेली ने उन्हें सन में रहने और एक नई भाषा डिजाइन करने के लिए राजी किया। जेम्स गोसलिंग, अन्य मूल डिजाइनर, स्मॉलटॉक (ऑब्जेक्टिव-सी के प्रत्यक्ष पूर्वज) और लिस्प (स्मॉलटाक के लिए प्रेरणा) से बहुत परिचित थे। बाद में, उद्देश्य-सी डिजाइन टीम के कई सदस्य सूर्य में चले गए।
जॉर्ग डब्ल्यू मित्तग

0

मुझे कुछ जानकारी मिली और लगा कि इससे अन्य उत्तरों को सहायता मिलेगी। तो इसे शेयर करना चाहते हैं -

विकिपीडिया कहता है -

कंप्यूटर विज्ञान में, आदिम डेटा प्रकार निम्नलिखित में से एक है:

एक बुनियादी प्रकार एक डेटा प्रकार है जिसे प्रोग्रामिंग भाषा द्वारा बुनियादी बिल्डिंग ब्लॉक के रूप में प्रदान किया जाता है। अधिकांश भाषाएं अधिक जटिल मिश्रित प्रकारों को मूल प्रकार से शुरू करके पुन: निर्मित करने की अनुमति देती हैं।
एक अंतर्निहित प्रकार एक डेटा प्रकार है जिसके लिए प्रोग्रामिंग भाषा अंतर्निहित समर्थन प्रदान करती है।

अधिकांश प्रोग्रामिंग भाषाओं में, सभी बुनियादी डेटा प्रकार अंतर्निहित होते हैं। इसके अलावा, कई भाषाएं समग्र डेटा प्रकारों (जावा में "स्ट्रिंग" प्रकार) का एक सेट भी प्रदान करती हैं।

मैं इसे इस तरह से कहना चाहूंगा -
एक मूल डेटाटाइप एक डेटाटाइप है जिसे आगे तोड़ा नहीं जा सकता ("स्ट्रिंग" प्रकार "चार" से बनाया जा सकता है, लेकिन चार को किसी भी डेटाटाइप में नहीं तोड़ा जा सकता है) (अधिकांश प्रोग्रामिंग में) भाषाएँ)। तो यह मूल डेटाटाइप है)

स्ट्रिंग प्रकार, SNOBOL4 में आदिम माना जाता है। हालांकि मुझे सटीक कारण नहीं पता है। यह दोनों बुनियादी और साथ ही SNOBOL4 में अंतर्निहित है।

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


-2

आदिम मौलिक डेटा प्रकार हैं जो भाषा द्वारा ही प्रदान किए जाते हैं। C भाषा में उदाहरण int, float, char data types हैं। इसे भाषा के मूलभूत भाग के रूप में प्रदान किया जाता है।

गैर आदिम उपयोगकर्ता परिभाषित चर या वस्तु हैं। उदाहरण के लिए आप एक ऑब्जेक्ट को परिभाषित कर सकते हैं जो डेटा को स्टोर करता है या आप स्वयं के चर को परिभाषित करने के लिए सी में संरचना का उपयोग कर सकते हैं। ये आदिम नहीं हैं क्योंकि आपको इन्हें इस्तेमाल करने के लिए पहले परिभाषित करना था।

उदाहरण: कर्मचारी, छात्र, a_very_large_number_that_you_defined_yrie

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

जवाब आप टिप्पणी करें: यह शायद चर के कार्यान्वयन के साथ करना है। यदि यह भाषा कोर का हिस्सा था, तो यह आदिम है। यदि ऐसा नहीं है। उदाहरण C ++ में स्ट्रिंग है। यह एक मुख्य चर नहीं है और इसे न्यू कीवर्ड का उपयोग करके घोषित किया गया है। तो यह आदिम नहीं है।


जवाब के लिए धन्यवाद । क्या "आदिम" के रूप में डेटाटाइप का वर्गीकरण कार्यान्वयन पर निर्भर करता है? जैसे C / C ++ में हम char arrays के रूप में स्ट्रिंग्स को स्टोर करते हैं। लेकिन हमें उन्हें स्पष्ट रूप से परिभाषित करने की आवश्यकता है। तो अगर किसी अन्य भाषा में स्ट्रिंग को स्टोर करने के लिए समान कार्यान्वयन है, लेकिन इसे अंतर्निहित रूप से प्रदान करता है, तो क्या डेटाटाइप "स्ट्रिंग" उस विशेष भाषा में एक आदिम होगा?
jsp99

@ आप - संभवतः। सी एक stringडेटा प्रकार प्रदान नहीं करता है जैसे; तार आदिम प्रकार के समुच्चय के रूप में दर्शाए जाते हैं char। C ++ ने एक उचित stringडेटा प्रकार पेश किया , लेकिन यह "आदिम" प्रकार का है या नहीं, यह आप पर निर्भर करता है कि आप किससे पूछते हैं। व्यक्तिगत रूप से, मैं इसे इस तरह वर्गीकृत नहीं करूंगा। हालांकि, मैं एक पुराने स्कूल-बेसिक स्ट्रिंग प्रकार को एक आदिम प्रकार के रूप में वर्गीकृत करूंगा, उन कारणों के लिए जो संभवतः पूरी तरह से मनमाना हैं।
जॉन बोड

अपनी टिप्पणी को संबोधित किया और इस सवाल को स्वयं ही बता दिया। Plz संपादित देखें।
Noname

2
C ++ में स्ट्रिंग्स को नए
jk

@jk मैं C ++ के संपर्क से बाहर था। तुम सही हो। As को ठीक करेगा।
नॉनमार्ट

-2

आदिम प्रकार और उपयोगकर्ता द्वारा परिभाषित डेटाटाइप की अवधारणा को बेहतर ढंग से समझने के लिए, अन्य उत्तरों की कमी की अवधारणा है compiler

यदि आप लेक्सेम की अवधारणा को टोकन के रूप में चुने जाने की समझ रखते हैं , तो आपको पता चल जाएगा कि प्राइमेटिव एकमात्र डेटाटिप्स हैं जो एक कंपाइलर खुद से जानता है।

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