Haskell Language
कस्टम डेटा प्रकार बनाना
खोज…
एक साधारण डेटा प्रकार बनाना
हास्केल में कस्टम डेटा प्रकार बनाने का सबसे आसान तरीका data
कीवर्ड का उपयोग करना है:
data Foo = Bar | Biz
प्रकार का नाम data
और =
बीच निर्दिष्ट है, और इसे एक प्रकार का निर्माता कहा जाता है। के बाद =
हम अपने डेटा प्रकार के सभी मूल्य निर्माता निर्दिष्ट करते हैं, जिसे सीमांकित किया जाता है |
संकेत। हास्केल में एक नियम है कि सभी प्रकार और मूल्य निर्माणकर्ताओं को एक बड़े अक्षर से शुरू करना चाहिए। उपरोक्त घोषणा निम्नानुसार पढ़ी जा सकती है:
Foo
नामक एक प्रकार को परिभाषित करें, जिसमें दो संभावित मान हैं:Bar
औरBiz
।
हमारे कस्टम प्रकार के चर बनाना
let x = Bar
ऊपर बयान एक चर नामित बनाता x
प्रकार के Foo
। आइए इसके प्रकार की जांच करके इसे सत्यापित करें।
:t x
प्रिंट
x :: Foo
मान निर्माता पैरामीटर के साथ डेटा प्रकार बनाना
मूल्य निर्माता वे कार्य हैं जो किसी डेटा प्रकार का मान लौटाते हैं। इस वजह से, किसी भी अन्य फ़ंक्शन की तरह, वे एक या अधिक पैरामीटर ले सकते हैं:
data Foo = Bar String Int | Biz String
आइए Bar
वैल कंस्ट्रक्टर के प्रकार की जांच करें।
:t Bar
प्रिंट
Bar :: String -> Int -> Foo
जो साबित करता है कि Bar
वास्तव में एक फ़ंक्शन है।
हमारे कस्टम प्रकार के चर बनाना
let x = Bar "Hello" 10
let y = Biz "Goodbye"
टाइप पैरामीटर के साथ डेटा टाइप बनाना
प्रकार के निर्माता एक या अधिक प्रकार के पैरामीटर ले सकते हैं:
data Foo a b = Bar a b | Biz a b
हास्केल में टाइप पैरामीटर एक लोअरकेस अक्षर से शुरू होना चाहिए। हमारा कस्टम डेटा प्रकार अभी तक वास्तविक प्रकार नहीं है। अपने प्रकार के मूल्यों को बनाने के लिए, हमें सभी प्रकार के मापदंडों को वास्तविक प्रकारों के साथ बदलना चाहिए। क्योंकि a
और b
किसी भी प्रकार के हो सकते हैं, हमारे मूल्य निर्माता पॉलीमॉर्फिक फ़ंक्शन हैं।
हमारे कस्टम प्रकार के चर बनाना
let x = Bar "Hello" 10 -- x :: Foo [Char] Integer
let y = Biz "Goodbye" 6.0 -- y :: Fractional b => Foo [Char] b
let z = Biz True False -- z :: Foo Bool Bool
रिकॉर्ड मापदंडों के साथ कस्टम डेटा प्रकार
मान लें कि हम एक डेटा टाइप पर्सन बनाना चाहते हैं, जिसमें पहला और आखिरी नाम, एक उम्र, एक फोन नंबर, एक सड़क, एक ज़िप कोड और एक शहर है।
हम लिख सकते थे
data Person = Person String String Int Int String String String
अगर हम चाहते हैं कि अब हमें फोन नंबर मिल जाए, तो हमें एक फंक्शन करना होगा
getPhone :: Person -> Int
getPhone (Person _ _ _ phone _ _ _) = phone
खैर, यह कोई मज़ा नहीं है। हम मापदंडों का उपयोग करके बेहतर कर सकते हैं:
data Person' = Person' { firstName :: String
, lastName :: String
, age :: Int
, phone :: Int
, street :: String
, code :: String
, town :: String }
अब हमें फंक्शन phone
मिल जाता है
:t phone
phone :: Person' -> Int
हम अब जो चाहें कर सकते हैं, जैसे:
printPhone :: Person' -> IO ()
printPhone = putStrLn . show . phone
हम फोन नंबर को पैटर्न मिलान द्वारा भी बांध सकते हैं:
getPhone' :: Person' -> Int
getPhone' (Person {phone = p}) = p
मापदंडों के आसान उपयोग के लिए RecordWildCards देखें