स्केलर बनाम आदिम डेटा प्रकार - क्या वे एक ही चीज़ हैं?


127

मेरे द्वारा पढ़े गए विभिन्न लेखों में, कभी-कभी आदिम डेटा प्रकारों के संदर्भ होते हैं और कभी-कभी स्केलरों के संदर्भ भी होते हैं।

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

क्या कुछ ऐसा है जो मुझे याद आ रहा है इसका मतलब है कि आपको विशेष शब्दावली का उपयोग करना चाहिए या क्या शब्द केवल विनिमेय हैं? प्रत्येक के लिए विकिपीडिया पृष्ठ कुछ भी स्पष्ट नहीं दिखाते हैं।

यदि शब्द केवल विनिमेय हैं, जो पसंदीदा है?

जवाबों:


203

मुझे नहीं लगता कि वे विनिमेय हैं। वे अक्सर समान होते हैं, लेकिन अंतर मौजूद होता है, और मुख्य रूप से ऐसा लगता है कि वे किसके साथ विपरीत हैं और क्या प्रासंगिक है।

Scalars आम तौर पर के विपरीत कर रहे हैं यौगिकों पूर्णांक, बूलियन, शायद एक स्ट्रिंग - - जबकि एक यौगिक कई scalars (और संभवतः के लिए संदर्भ से बना है ऐसे सरणियों, नक्शे, सेट, structs, आदि एक अदिश एक "एकल" मूल्य के रूप में, अन्य यौगिक)। "स्केलर" का उपयोग उन संदर्भों में किया जाता है जहां प्रासंगिक अंतर एकल / सरल / परमाणु मूल्यों और यौगिक मूल्यों के बीच होता है।

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

यह वास्तव में संदर्भ पर निर्भर करता है (और अक्सर किस भाषा परिवार पर चर्चा की जा रही है)। एक लेने के लिए, संभवतः रोगविज्ञान, उदाहरण: तार। सी में, एक स्ट्रिंग एक यौगिक (वर्णों का एक सरणी) है, जबकि पर्ल में, एक स्ट्रिंग एक स्केलर है। जावा में, एक स्ट्रिंग एक ऑब्जेक्ट (या संदर्भ प्रकार) है। पायथन में, सब कुछ (वैचारिक रूप से) एक वस्तु / संदर्भ प्रकार है, जिसमें तार (और संख्याएं) शामिल हैं।


1
संदर्भ प्रकारों की चर्चा में भी माना जाता है और आदिम प्रकार "मूल्य" प्रकार हैं। स्केलर्स और प्राइमेटिव्स की समानता के बारे में, यह भाषा पर निर्भर करता है। उदाहरण के लिए, PHP मैनुअल के अनुसार, इसके आधे आदिम प्रकार स्केलर हैं: php.net/manual/en/language.types.intro.php
जो बोबीबेर

11
इससे मुझे 8 साल बाद :)
CoderXYZ

18

इन शर्तों का बहुत भ्रम और दुरुपयोग है। अक्सर एक का मतलब दूसरे के लिए किया जाता है। यहाँ उन शब्दों का वास्तव में मतलब है।

"मूल" उन प्रकारों को संदर्भित करता है जो भाषा में निर्मित होते हैं, एक पुस्तकालय (यहां तक ​​कि एक मानक पुस्तकालय) द्वारा प्रदान किए जाने के विपरीत, चाहे वे कैसे भी लागू हों। पर्ल स्ट्रिंग पर्ल भाषा का हिस्सा है, इसलिए वे पर्ल में मूल निवासी हैं। C एक लाइब्रेरी का उपयोग करके चार्ट पर पॉइंटर्स को स्ट्रिंग शब्दार्थ प्रदान करता है, इसलिए पॉइंटर का सूचक देशी है, लेकिन स्ट्रिंग्स नहीं हैं।

"परमाणु" एक प्रकार को संदर्भित करता है जिसे अब विघटित नहीं किया जा सकता है। यह "समग्र" के विपरीत है । कंपोजिट को परमाणु मूल्यों या अन्य कंपोजिट के संयोजन में विघटित किया जा सकता है। मूल पूर्णांक और फ्लोटिंग पॉइंट संख्या परमाणु हैं। अंश, जटिल संख्या, कंटेनर / संग्रह, और तार समग्र हैं।

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

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

ये परिभाषाएं भाषा के प्रयोग से स्वतंत्र हैं।


16
हालांकि एक स्केलर प्रकार की यह परिभाषा मेरे लिए सबसे अधिक मायने रखती है, लेकिन यह सबसे अधिक स्वीकृत एक प्रतीत नहीं होता है।
lleaff

1
'स्केलर' की स्पष्ट परिभाषा के लिए धन्यवाद। हालांकि, जैसा कि @lleaff बताते हैं कि ज्यादातर लोग इस विशिष्ट अर्थ में इसका उपयोग नहीं करते हैं, यह बेहतर होगा यदि वे करते हैं।
घड़ी की कल

उत्कृष्ट भाषाई परिभाषाएँ। फुलर चर्चा के लिए माइकल एकस्ट्रैंड के जवाब के साथ इस जवाब को पढ़ा जाना चाहिए। प्रोग्रामिंग भाषाओं के संदर्भ में, स्केलर के अलग-अलग अर्थ हैं, दुर्भाग्य से।
जेरी

9

सीधे शब्दों में कहें, तो ऐसा प्रतीत होता है कि एक 'स्केलर' प्रकार एक एकल आइटम को संदर्भित करता है, जैसा कि एक समग्र या संग्रह के विपरीत। अतः स्केलरों में प्राइमरी वैल्यू के साथ-साथ एनम वैल्यू जैसी चीजें शामिल हैं।

http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html

शायद 'स्केलर' शब्द सी के लिए एक थ्रोबैक हो सकता है:

जहां स्केलर आदिम ऑब्जेक्ट होते हैं, जिनमें एकल मान होता है और अन्य C ++ ऑब्जेक्ट्स से बने नहीं होते हैं

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf

मुझे इस बात की उत्सुकता है कि क्या यह संदर्भित करता है कि क्या इन वस्तुओं का मूल्य 'स्केल' होगा? - जैसे कि गिनती की संख्या।


2
मुझे (स्कूल में बहुत समय पहले) पढ़ाया गया था कि यह शब्द 'वेक्टर प्रोसेसर' के विपरीत 'स्केलर प्रोसेसर' से लिया गया था। स्केलर प्रोसेसर एक सीपीयू है जो केवल एक बार में एक डेटा का टुकड़ा संभाल सकता है। ये प्रोसेसर अंकगणितीय शब्दों के नाम पर थे / हैं। दिलचस्प रूप से पर्याप्त है, जब आप विकिपीडिया पर 'स्केलर' देखते हैं, तो आप 'चर' पर पुनर्निर्देशित हो जाते हैं।
एवर्ट

2

मुझे स्कॉट लैंगबर्ग का जवाब पसंद है क्योंकि यह आधिकारिक लिंक द्वारा संक्षिप्त और समर्थित है। अगर मैं कर सकता हूं तो मैं स्कॉट के जवाब को वोट करूंगा।

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

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

स्केलर व्युत्पत्ति ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none ) का अर्थ है सीढ़ी-जैसा। मुझे लगता है कि यह जिस तरह से प्रोग्रामिंग से संबंधित है, वह यह है कि एक सीढ़ी का केवल एक ही आयाम होता है: सीढ़ी के अंत से कितने बढ़ते हैं। एक स्केलर डेटा प्रकार में केवल एक आयाम होता है, इस प्रकार एकल मान द्वारा दर्शाया जाता है।

मुझे लगता है कि उपयोग में, आदिम और अदिश विनिमेय हैं। क्या ऐसे आदिम का कोई उदाहरण है जो स्केलर नहीं है, या एक स्केलर है जो कि आदिम नहीं है?

हालांकि विनिमेय, आदिम डेटा-प्रकार को संदर्भित करता है जो अन्य डेटा प्रकारों का एक बुनियादी बिल्डिंग ब्लॉक है, और एक आदिम अन्य डेटा प्रकारों से बना नहीं है।

स्केलर से तात्पर्य एकल मूल्य से है। गणितीय वेक्टर के साथ स्केलर विपरीत है। एक सदिश एक एकल मान द्वारा प्रदर्शित नहीं किया जाता है क्योंकि (एक उदाहरण के रूप में सदिश के एक प्रकार का उपयोग करके) एक मान सदिश की दिशा का प्रतिनिधित्व करने के लिए आवश्यक है और वेक्टर के परिमाण का प्रतिनिधित्व करने के लिए आवश्यक एक और मूल्य।

संदर्भ लिंक: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type


0

सी में, एन्यूमरेशन प्रकार, वर्ण और पूर्णांक के विभिन्न निरूपण एक अधिक सामान्य प्रकार के वर्ग बनाते हैं जिन्हें स्केलर प्रकार कहा जाता है। इसलिए, किसी भी स्केलर प्रकार के मूल्यों पर आप जो कार्य कर सकते हैं, वे पूर्णांक के लिए समान हैं।


0

अशक्त प्रकार केवल एक चीज है जो अधिकांश वास्तविक रूप से "स्केलर प्रकार" की परिभाषा के अनुरूप है। यहां तक ​​कि ization एन ’के रूप में 'कोई नहीं’ का धारावाहिककरण। एक 16 बिट शब्द में फिटिंग जो पारंपरिक रूप से स्केलर है - या यहां तक ​​कि एक एकल बिट जिसमें कई संभावित मूल्य हैं - एक "एकल डेटा" नहीं है।

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