ठीक है, हम एक-एक करके चलते हैं।
मान
मान डेटा के ठोस टुकड़े हैं जो प्रोग्राम मूल्यांकन और जॉगल करते हैं। कुछ भी नहीं फैंसी, कुछ उदाहरण हो सकता है
1
true
"fizz buzz foo bar"
प्रकार
एक प्रकार के लिए एक अच्छा विवरण "एक मूल्य के लिए एक वर्गीकरण" है। एक प्रकार थोड़ी जानकारी है कि रनटाइम पर क्या मूल्य होगा, लेकिन संकलन समय पर संकेत दिया गया है।
उदाहरण के लिए यदि आप मुझे बताते हैं कि e : bool
संकलन के समय, और मुझे पता होगा कि या e
तो रनटाइम के दौरान, और कुछ नहीं! क्योंकि प्रकार इस तरह से मूल्यों को वर्गीकृत करते हैं, इसलिए हम इस जानकारी का उपयोग आपके कार्यक्रम के कुछ बुनियादी गुणों को निर्धारित करने के लिए कर सकते हैं।true
false
उदाहरण के लिए, अगर मैं कभी आपको जोड़कर देखता हूं e
और e'
कब e : int
और e' : String
फिर, मुझे पता है कि कुछ बंद है! वास्तव में, मैं इसे ध्वजांकित कर सकता हूं और "अरे, यह बिल्कुल भी कोई मतलब नहीं है!"
एक अधिक शक्तिशाली प्रकार की प्रणाली अधिक दिलचस्प प्रकारों के लिए अनुमति देती है जो अधिक दिलचस्प मूल्यों को वर्गीकृत करती है। उदाहरण के लिए, आइए कुछ फ़ंक्शन पर विचार करें
f = fun x -> x
यह बहुत स्पष्ट है कि f : Something -> Something
, लेकिन क्या होना Something
चाहिए? एक उबाऊ प्रकार की प्रणाली में, हमें कुछ मनमाना निर्दिष्ट करना होगा, जैसे Something = int
। अधिक लचीली प्रकार प्रणाली में, हम कह सकते हैं
f : forall a. a -> a
यह कहना है "के लिए किसी भी a
, f
नक्शे a
एक a
"। आइए हम f
अधिक सामान्यतः उपयोग करें और अधिक दिलचस्प कार्यक्रम लिखें।
इसके अलावा, कंपाइलर ने हमारे द्वारा दिए गए क्लासिफायर को संतुष्ट करने के लिए वास्तव में जांच करने जा रहा है, अगर f = fun x -> true
तब हमारे पास बग है और कंपाइलर ऐसा कहेगा!
तो एक tldr के रूप में; एक प्रकार एक संकलित समय बाधा है मूल्यों पर एक अभिव्यक्ति रनटाइम पर हो सकती है।
कन्स्ट्रक्टर टाइप करें
कुछ प्रकार संबंधित हैं। उदाहरण के लिए पूर्णांकों की एक सूची तार की सूची के समान है। यह लगभग sort
पूर्णांक के लिए कैसे है लगभग sort
स्ट्रिंग के लिए पसंद है। हम एक तरह की फैक्ट्री की कल्पना कर सकते हैं जो इन अंतरों को सामान्य बनाकर और उनके मांग के आधार पर इनका निर्माण करती है। यह एक प्रकार का कंस्ट्रक्टर है। यह प्रकारों से प्रकारों के लिए एक फ़ंक्शन की तरह है, लेकिन थोड़ा अधिक सीमित है।
क्लासिक उदाहरण एक सामान्य सूची है। एक प्रकार का निर्माणकर्ता केवल सामान्य परिभाषा है
data List a = Cons a (List a) | Nil
अब List
एक फ़ंक्शन है जो a
उस प्रकार के मूल्यों की सूची के लिए एक प्रकार का मानचित्र बनाता है! जावा-भूमि में मुझे लगता है कि इन्हें शायद "सामान्य वर्ग" कहा जाता है
पैरामीटर्स टाइप करें
एक प्रकार का पैरामीटर सिर्फ टाइप कंस्ट्रक्टर (या फ़ंक्शन) के लिए दिया गया प्रकार है। जैसे मान स्तर में हम कहेंगे foo(a)
कि एक पैरामीटर है a
ठीक उसी तरह जैसे कि List a
एक प्रकार का पैरामीटर कैसे होता है a
।
प्रकार
किंड्स थोड़े ट्रिकी होते हैं। मूल विचार यह है कि कुछ प्रकार समान होते हैं। उदाहरण के लिए, हम जावा में सभी आदिम प्रकार है int
, char
, float
... जो सभी व्यवहार के रूप में यदि वे एक ही "प्रकार" है। सिवाय, जब हम खुद प्रकारों के लिए क्लासिफायर की बात कर रहे हैं, तो हम क्लासिफायर टाइप कहते हैं। तो int : Prim
, String : Box
, List : Boxed -> Boxed
।
यह प्रणाली इस बात के बारे में अच्छे ठोस नियम देती है कि हम किस प्रकार के प्रकारों का उपयोग कर सकते हैं, ठीक उसी तरह जैसे कि किस प्रकार मूल्यों को नियंत्रित करते हैं। यह स्पष्ट रूप से कहना बकवास होगा
List<List>
या
List<int>
जावा में चूंकि List
उस तरह इस्तेमाल किए जाने के लिए एक ठोस प्रकार पर लागू करने की आवश्यकता है! यदि हम उनके प्रकारों को देखते हैं List : Boxed -> Boxed
और चूंकि Boxed -> Boxed /= Boxed
, उपरोक्त एक प्रकार की त्रुटि है!
अधिकांश समय हम वास्तव में प्रकारों के बारे में नहीं सोचते हैं और बस उन्हें "सामान्य ज्ञान" के रूप में मानते हैं, लेकिन कट्टरपंथी प्रकार के सिस्टम के बारे में सोचना महत्वपूर्ण है।
अब तक जो कुछ मैं कह रहा हूं उसका थोड़ा चित्रण
value : type : kind : ...
true : bool : Prim : ...
new F() : Foo : Boxed : ...
विकिपीडिया से बेहतर पढ़ना
यदि आप इस प्रकार की रुचि रखते हैं, तो मैं एक अच्छी पाठ्यपुस्तक का निवेश करने की अत्यधिक सलाह दूंगा। सामान्य रूप से टाइप थ्योरी और पीएलटी काफी विशाल है और ज्ञान के सुसंगत आधार के बिना आप (या कम से कम मैं) महीनों तक बिना रुके घूम सकते हैं।
मेरी दो पसंदीदा पुस्तकें हैं
- प्रकार और प्रोग्रामिंग भाषा - बेन पियर्स
- प्रोग्रामिंग भाषाओं की व्यावहारिक नींव - बॉब हार्पर
दोनों उत्कृष्ट पुस्तकें हैं जो परिचय देती हैं कि मैंने अभी क्या बात की है और बहुत अधिक सुंदर, अच्छी तरह से समझाया गया है।