Elm भाषा में वैकल्पिक वैल्यू के लिए Maybe टाइप समाधान है।
इसलिए यह Elm के बहुत सारे मुख्य फंक्शन के टाइप सिग्नेचर में मौजूद रहता है। इसे समझना बेहद ज़रूरी है।
Maybe टाइप इस तरह परिभाषित किया गया है:
type Maybe a = Nothing | Just a
Elm की शब्दावली में इसे "कस्टम टाइप" की परिभाषा कहते हैं।
यह बताता है कि इस टाइप की कोई वैल्यू या तो Nothing होती है या टाइप a की कोई वैल्यू Just के अंदर होती है।
Maybe वैल्यू बनाने के लिए इसके दो कंस्ट्रक्टर Nothing और Just में से किसी एक का इस्तेमाल किया जाता है।
Maybe के अंदर रखी वैल्यू को पढ़ने के लिए पैटर्न मैचिंग की जाती है।
matthieu : Maybe String
matthieu = Just "Matthieu"
anon : Maybe String
anon = Nothing
sayHello : Maybe String -> String
sayHello maybeName =
case maybeName of
Nothing -> "Hello, World!"
Just someName -> "Hello, " ++ someName ++ "!"
sayHello matthieu
--> "Hello, Matthieu!"
sayHello anon
--> "Hello, World!"
Maybe मॉड्यूल में Maybe टाइप पर काम करने के लिए कई उपयोगी फंक्शन भी हैं।
sayHelloAgain : Maybe String -> String
sayHelloAgain name = "Hello, " ++ Maybe.withDefault "World" name ++ "!"
capitalizeName : Maybe String -> Maybe String
capitalizeName name = Maybe.map String.toUpper name
capitalizeName matthieu
--> Just "MATTHIEU"
capitalizeName anon
--> Nothing
इस अभ्यास में आप एक रोल-प्लेइंग गेम के कुछ तरीके बनाएँगे। खिलाड़ी के पात्र को नीचे दिए गए टाइप से दर्शाया जाता है:
type alias Player =
{ name : Maybe String
, level : Int
, health : Int
, mana : Maybe Int
}
इस खेल में खिलाड़ियों को जादू करना शुरू करने के लिए पहले लेवल 10 तक पहुँचना होता है। लेवल 10 पर पहुँचने पर ही उनका माना पूल खुलता है। इस खेल में आप दो चीज़ों पर काम कर रहे हैं: जीवित करने का तरीका और जादू करने का तरीका।
introduce फंक्शन के अंदर का कोड लिखिए।
चुपके रहने वाले खिलाड़ी अपना नाम छिपा सकते हैं, और ऐसे खिलाड़ियों का परिचय "Mighty Magician" के रूप में दिया जाएगा।
वरना, अपना परिचय देने के लिए बस अपना नाम इस्तेमाल कीजिए।
introduce { name = Nothing, level = 2, health = 8, mana = Nothing }
--> "Mighty Magician"
introduce { name = Just "Merlin", level = 2, health = 8, mana = Nothing }
--> "Merlin"
revive फंक्शन को जाँचना चाहिए कि खिलाड़ी का पात्र वास्तव में मर चुका है या नहीं (यानी उसका स्वास्थ्य 0 तक पहुँच गया है)।
अगर मर चुका है, तो उसे 100 स्वास्थ्य वाला एक नया Player इंस्टेंस लौटाना चाहिए।
वरना, अगर खिलाड़ी का पात्र मरा नहीं है, तो revive फंक्शन Nothing लौटाता है।
अगर खिलाड़ी का लेवल 10 या उससे अधिक है, तो उसे 100 माना के साथ भी जीवित किया जाना चाहिए।
और अगर खिलाड़ी का लेवल 10 से कम है, तो उसका माना Nothing होगा।
revive फंक्शन को खिलाड़ी का लेवल वैसा ही बनाए रखना चाहिए।
deadPlayer = { name = Nothing, level = 2, health = 0, mana = Nothing }
revive deadPlayer
--> Just { name = Nothing, level = 2, health = 100, mana = Nothing }
अगर revive मेथड ऐसे खिलाड़ी पर कॉल किया जाए जिसका स्वास्थ्य 1 या उससे अधिक है, तो फंक्शन को Nothing लौटाना चाहिए।
alivePlayer = { name = Nothing, level = 2, health = 42, mana = Nothing }
revive alivePlayer
--> Nothing
castSpell फंक्शन आर्गुमेंट के तौर पर एक Int लेता है, जो बताता है कि जादू में कितना माना लगेगा, और साथ में एक Player भी लेता है।
यह अपडेट किया हुआ खिलाड़ी लौटाता है और साथ ही उतना नुकसान भी लौटाता है जितना किया गया जादू करता है।
सफल जादू उतना नुकसान करता है जितना जादू में लगे माना का दोगुना होता है।
लेकिन अगर खिलाड़ी के पास पर्याप्त माना नहीं है, तो कुछ नहीं होता: खिलाड़ी वैसा ही रहता है और कोई नुकसान नहीं होता।
अगर खिलाड़ी के पास माना पूल ही नहीं है, तो जादू करने की कोशिश में उसका स्वास्थ्य जादू में लगने वाले माना के बराबर घट जाता है, और कोई नुकसान नहीं होता।
wizard = { name = Nothing, level = 18, health = 123, mana = Just 30 }
( updatedWizard, damage ) = castSpell 14 wizard
updatedWizard.mana --> Just 16
damage --> 28
Exercism पर साइन अप कीजिए और Elm को 28 कॉन्सेप्ट110 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।