हमने सभी पूर्णांक, फ्लोटिंग पॉइंट, स्ट्रिंग और सामयिक दशमलव प्रकार देखे हैं। आपके द्वारा सामना किए गए कुछ सबसे अजीब या अद्वितीय या उपयोगी प्रकार क्या हैं, उपयोगी हैं या नहीं?
हमने सभी पूर्णांक, फ्लोटिंग पॉइंट, स्ट्रिंग और सामयिक दशमलव प्रकार देखे हैं। आपके द्वारा सामना किए गए कुछ सबसे अजीब या अद्वितीय या उपयोगी प्रकार क्या हैं, उपयोगी हैं या नहीं?
जवाबों:
मैं छोटा हूँ:
Maybe a
हास्केल में।
इस सरल निर्माण के साथ, भाषा दुर्घटनाओं के मुद्दे को हल करती है या NullPointerException
, यह बड़े पैमाने पर टोनी होउ के "वन मिलियन मिस्टेक" को दरकिनार कर देती है :)
सच कहूँ, एक वैकल्पिक उपस्थिति संकलन-समय पर जाँच की? यह सपने की तरह है ...
Option
नाम पसंद नहीं है । क्यों नहीं Optional
! यह हो सकता है क्योंकि मैं कोई मूल वक्ता Option
नहीं हूं , लेकिन मेरे लिए "वैकल्पिक" अर्थ को व्यक्त नहीं करता है।
Maybe
नाम प्यारा है: "आप क्या है?" "शायद एक इंट"। हालाँकि, वास्तव में साफ-सुथरा सा यह है कि यह एक फनकार और एक सन्यासी दोनों है, जो सीधे शब्दों में कहें तो इसका मतलब है कि आपको मुफ्त में अशक्त प्रचार मिल रहा है। आपको कार्यों के अंदर या अपने कोड के बीच में शून्य चेक लगाने की आवश्यकता नहीं है; आपको केवल कभी भी अपने कोड के अंत में इसकी जांच करने की आवश्यकता है, यदि बिल्कुल भी।
Maybe
: रूबी के लिए इकाई lostechies.com/derickbailey/2010/10/10/the-maybe-monad-in-ruby
मैं बारहमासी हूं void *
। यह शायद मुझमें किसी चीज़ का गहरा दोष है।
void *
और पास्कल / डेल्फी है Pointer
।
लुआ में एक अंतर्निहित तालिका है जो सबसे प्रभावशाली है। इसमें एक अंतर्निहित हैशटेबल और एक वेक्टर है, और मेटाटैबल्स के उपयोग के साथ एक प्रक्रियात्मक भाषा में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए मूल आधार हो सकता है।
तालिका के प्रत्येक सूचकांक में कोई भी मूल भाषा संरचना (संख्या, बूलियन, स्ट्रिंग, फ़ंक्शन -yes, फ़ंक्शन लुआ - और टेबल पर टाइप हैं) प्राप्त कर सकते हैं।
लिस्प के दो दिलचस्प प्रकार हैं: t
और nil
। उनके बारे में क्या दिलचस्प है कि सब कुछ एक है t
और कुछ भी नहीं है nil
।
nil
एक t
?
SNOBOL: पैटर्न (मूल रूप से एक एलएल (1) पार्सर ट्री, अगर मुझे यह सही ढंग से याद है)।
फोरट्रान के आम ब्लॉक हैं; यह आधुनिक भाषाओं में कम से कम सामान्य डेटा प्रकारों में से एक है, या, बल्कि कुशलतापूर्वक डेटा साझा करने का एक असामान्य तरीका है।
फोरट्रान 95 में अंतराल प्रकार और अंतर्निहित अंतराल अंकगणित हैं।
हास्केल में पाए जाने वाले मौद्रिक प्रकारों के बिना सूची पूरी नहीं होगी । उन्हें समझने के लिए आपको थोड़ा प्रयास करने की आवश्यकता है।
डेल्फी के सेट हैं ( यह भी देखें ), जो मुझे नहीं लगता कि अन्य भाषाओं में उसी तरह लागू किया जाता है।
यह डेटाबेस में एक हवा: डी में बहु-चर विशेषताओं को संग्रहीत करता है
मुझे लगता है कि यह वास्तव में केवल एक शास्त्रीय वास्तुकला पर प्रोग्रामिंग से आने वाला अजीब है, लेकिन निश्चित रूप से मेरे लिए अपने सिर को चारों ओर लपेटने के लिए सबसे कठिन प्रकारों में से एक क्वांटम रजिस्टर था , जो कि QCL में दिखाई देता है ।
PL / SQL आपको प्रकार के चर घोषित करने देता है my_table.some_column%type
... मुझे लगता है कि यह बहुत उपयोगी है।
और C # आपको वस्तुओं को अशक्त या नहीं घोषित करने देता है, हालांकि मुझे यकीन नहीं है कि यह एक प्रकार के रूप में गिना जाता है।
cursor%rowtype
यहां तक कि मजेदार भी है: यह एक गतिशील रूप से गठित रिकॉर्ड प्रकार है जो दर्शाता है कि कर्सर के क्वेरी रिटर्न कौन से कॉलम में हैं।
जब मैं छोटा था तब यूफोरिया के डेटा प्रकारों के लिए मेरे दिल में एक नरम स्थान था
यह इस प्रकार संरचित है:
Object
-> Atom
-> Sequence
अनुक्रम = वस्तुओं का एक क्रम
-- examples of atoms:
0
98.6
-1e6
-- examples of sequences:
{2, 3, 5, 7, 11, 13, 17, 19}
{1, 2, {3, 3, 3}, 4, {5, {6}}}
{{"jon", "smith"}, 52389, 97.25}
{} -- the 0-element sequence
देखें: रेफरी मैनुअल
नोट: "जों" वास्तव में ASCII मूल्यों के अनुक्रम को लिखने का एक छोटा हाथ है। उदाहरण के लिए के "ABCDEFG"
रूप में ही है{65, 66, 67, 68, 69, 70, 71}
फेलिक्स में अनाम योग हैं। प्रकार लिखा है:
typedef il = int + long;
जैसा कि यह सिद्धांत में होगा। मूल्य बदसूरत हैं:
case 0 of il (1)
case 1 of il (2L)
सिवाय शायद एक यूनिट राशि के लिए जैसे 3 = 1 + 1 + 1
case 0 of 3
case 1 of 3
जो दुर्भाग्य से "सी अनुकूलता" के लिए शून्य मूल गिनती का उपयोग करता है। अज्ञात रूप से टाइप किए गए बीजीय प्रकारों के लिए बेनामी रकम आवश्यक है:
(1 + T * li) as li
टी। की अन्य (एकल रूप से जुड़ी हुई) सूची है। अन्य सभी भाषाओं के बारे में मुझे नाममात्र की टाइप की जाने वाली रकमों का पता है, जहाँ स्वयं और कंस्ट्रक्टर्स दोनों को नाम दिए जाने चाहिए।
ऊपर प्रयुक्त शॉर्टहैंड 3 प्यारा है, पुस्तकालय में निम्नलिखित है:
typedef void = 0;
typedef unit = 1;
typedef bool = 2;
और यह संकेतन:
T ^ 3
स्थैतिक लंबाई 3 की एक सरणी है .. 3 एक पूर्णांक नहीं है, लेकिन 3 इकाइयों का योग है। क्या एक दया + सहयोगी नहीं है :)
q / kdb + में अंतर्निहित टेबल हैं। चूंकि यह एक प्रोग्रामिंग भाषा और कॉलम-ओरिएंटेड डेटाबेस है, इसलिए इसमें LINQ या ORM की कोई आवश्यकता नहीं है।
उदाहरण के लिए, इस तरह से एक तालिका बना सकते हैं (असाइनमेंट के :
बजाय =
सबसे भाषाओं में भेद किया जाता है):
people:([]name:`Joe`Amy`Sarah; age:17 15 18; GPA:3.5 3.8 3.33)
अब मैं अपनी तालिका देख सकता हूं:
q)show people
name age GPA
--------------
Joe 17 3.5
Amy 15 3.8
Sarah 18 3.33
और मैं इसे क्वेरी कर सकता हूं:
q)select from people where GPA>3.4
name age GPA
------------
Joe 17 3.5
Amy 15 3.8
जब मैंने पहली बार उनके बारे में सुना, तो मुझे C ++ में यूनियन का पता चला। मैंने अभी भी एक परिदृश्य नहीं मारा है जहां वे लागू करने के लिए स्पष्ट विकल्प हैं।
मैं अभी भी अपने सिर को लपेटने की कोशिश कर रहा हूं कि एफ # और अन्य कार्यात्मक भाषाओं में मल्टी-पैरामीटर फ़ंक्शन क्या होता है। मूल रूप से int f (Foo, Bar) func f (Foo) बन जाता है
वह दो पैरामीटर फ़ंक्शन है जो एक फू लेता है, और एक बार और एक int देता है वास्तव में एक पैरामीटर फ़ंक्शन है जो एक फू लेता है और एक पैरामीटर फ़ंक्शन को वापस लेता है जो एक बार लेता है और एक इंट वापस करता है। लेकिन किसी तरह आप इसे दो मापदंडों के साथ कॉल कर सकते हैं यदि आप चाहें। मैंने यहाँ इसके बारे में एक पोस्ट लिखी थी
f(Foo, Bar)
के समान है जो f(Foo)
किसी अन्य फ़ंक्शन f'(Bar)
को लौटाता है जो मान लौटाता है f(Foo, Bar)
। यही है, यदि आप 'फू' तर्क को ठीक करते हैं, लेकिन 'बार' नहीं, तो आपके पास एक फ़ंक्शन है जो 'फू' पर निर्भर नहीं करता है, लेकिन फिर भी 'बार' तर्क पर निर्भर करता है। यह कार्यात्मक भाषाओं के लिए विशिष्ट है; इसे 'करी' कहा जाता है।
वे अत्यंत शक्तिशाली हैं फिर भी कॉम्पैक्ट ऑब्जेक्ट।
जिन भाषाओं ने उन्हें बनाया है उनमें पाठ में हेरफेर करने की बड़ी क्षमता है (शब्द पार्स को सुन नहीं सकते हैं कि वे अच्छे नहीं हैं)।
कार्यात्मक परिवार में मुट्ठी भर भाषाओं में एकता के रूप में जाना जाता है। एकता प्रकारों की विशिष्ट विशेषता यह है कि उनमें कोई जानकारी नहीं होती है, वे शून्य प्रकार के होते हैं। एक एकता प्रकार (कुछ भिन्नताओं में) भी इसका एकमात्र मूल्य है, या (अधिकांश अन्य में) का केवल एक मूल्य है (जो स्वयं एक प्रकार नहीं है)।
हालांकि, ये उपयोगी हैं, क्योंकि वे प्रतिष्ठित प्रकार हैं। चूंकि आप एक एकता प्रकार से दूसरे में रूपांतरित नहीं कर सकते हैं, इसलिए आप स्थैतिक प्रकार की जाँच को एक बहुत ही कुशल और अभिव्यंजक तरीके से कार्य करने के लिए रख सकते हैं।
एकता भी तरह से सबसे ऐसी भाषाओं का वर्णन Enums, अन्य प्रकार के एक परिभाषित सेट के किसी भी रूप में एक नया प्रकार, या वर्णन करने के लिए अनुमति देकर है शायद प्रकार, मूल्यों या तो एक विशिष्ट प्रकार का एक मूल्य हो सकता है कि (एक पूर्णांक मान लीजिए) , या एक मूल्य है जो बिना मूल्य का प्रतिनिधित्व करता है।
कुछ भाषाएं जो उपयोगकर्ता परिभाषित समृद्धि प्रकारों को नियोजित नहीं करती हैं, उनमें अभी भी किसी न किसी रूप में एकता है। उदाहरण के लिए, अजगर कम से कम तीन एकता प्रकार हैं, NoneType
, NotImplementedType
, और EllipsisType
। यह दिलचस्प है कि पहले दो दोनों का मतलब "नो वैल्यू" जैसा है, लेकिन तीसरे का उपयोग दिलचस्प विशेष मामलों का प्रतिनिधित्व करने के लिए जटिल मूल्यों (विशेष रूप से, स्लाइस एक्सप्रेशन) में किया जाता है।
एकता के अन्य दिलचस्प उदाहरणों NULL
में sql और undefined
जावास्क्रिप्ट में शामिल हैं, लेकिन void
C या C ++ में नहीं। void
विफल रहता है। भले ही यह बिना किसी जानकारी के मूल्य का वर्णन करता है, लेकिन कोई वास्तविक मूल्य प्रकार का नहीं हो सकता है void
।
रूबी का symbol
प्रकार थोड़ा असामान्य है। यह अनिवार्य रूप से सिंगलटन पैटर्न को लागू करने वाला एक स्ट्रिंग है। या कुछ और। अब तक, मैंने पाया है कि प्रतीकों के लिए सबसे अच्छा उपयोग ट्रैकिंग राज्यों और फंक्शन नामों को पारित करने में होता है।
कोबोल। अनिवार्य रूप से केवल दो बुनियादी डेटा प्रकार, तार और संख्या है, लेकिन आपको यह निर्दिष्ट करना बिल्कुल कैसे वे स्मृति में बाहर रखी रहे हैं, उदाहरण के लिए PIC S9(5)V99 COMP-3
।
S
= हस्ताक्षरित, 9(5)
= 5 अंक, V
= निहित दशमलव बिंदु, 99
= 2 और अंक, COMP-3
= बीसीडी + साइन नाइबल।
क्लिपर के पास 'कोड ब्लॉक' थे, जो गुमनाम तरीकों के समान थे। उन्हें चारों ओर से पारित किया जा सकता है और आवश्यकतानुसार मूल्यांकन किया जा सकता है, आमतौर पर कॉलबैक के रूप में। आप अक्सर डेटा के तालिकाओं को पेश करते समय मक्खी पर गणना करने जैसी चीजों के लिए उनका उपयोग करेंगे।
VHDL के भौतिक प्रकार हैं। इस तरह के एक शाब्दिक मूल्य और एक इकाई दोनों शामिल हैं। आप सबयूनिट्स को भी परिभाषित कर सकते हैं। उदाहरण के लिए, एक पूर्वनिर्धारित भौतिक प्रकार है time
:
type time is range <machine dependant> to <machine dependant>
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
Ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
ऑपरेटर ओवरलोडिंग के साथ, आप बहुत दिलचस्प चीजों को परिभाषित कर सकते हैं।
क्लोजर दिलचस्प है क्योंकि इसमें "अमूर्त" की मेटा-अवधारणा है जो भाषा में व्याप्त है। उदाहरण:
कुछ हद तक, अमूर्त " एकल जिम्मेदारी सिद्धांत " को चरम पर ले जाते हैं। यह आप पर निर्भर करता है कि आप उन्हें वह कार्यक्षमता प्राप्त करना चाहते हैं, जो आप चाहते हैं, लेकिन आप इस बारे में बेहद लचीले हो सकते हैं कि आप उन्हें एक साथ कैसे गोंद सकते हैं।
उदाहरण के लिए, यदि आप वंशानुक्रम के साथ एक वर्ग-आधारित OOP प्रणाली चाहते हैं, तो आप अपेक्षाकृत जल्दी से इन मूल सार में से एक का निर्माण कर सकते हैं।
व्यवहार में, अमूर्तताएं खुद को इस तरह से डिज़ाइन की जाती हैं कि कई कार्यान्वयन संभव हैं, उदाहरण के लिए clojure.lang.ISeq जैसे विशिष्ट इंटरफेस के माध्यम से अनुक्रम या clojure.lang.IF के लिए उच्च क्रम फ़ंक्शन।
इस विषय के बारे में एक दिलचस्प वीडियो है: द आर्ट ऑफ एब्स्ट्रेक्शन
Googles Go में एक "चैनल" प्रकार है जो काफी अनूठा है।