Gleam में नए डेटा टाइप बनाने का तरीका कस्टम टाइप है। इनके कई वेरिएंट हो सकते हैं, और हर वेरिएंट का अपना नाम होता है।
pub type Season {
Spring
Summer
Autumn
Winter
}
कस्टम टाइप का हर केस चाहें तो कुछ डेटा भी रख सकता है, और अलग-अलग केस अलग-अलग तरह का डेटा रख सकते हैं। जब किसी वेरिएंट में डेटा होता है, तो उसे रिकॉर्ड कहते हैं।
pub type Number {
SomeInt(Int)
SomeFloat(Float)
Invalid
}
किसी खास केस के लिए वैल्यू बनाने के लिए, अगर उसमें कोई अतिरिक्त डेटा नहीं है तो सिर्फ उसका नाम लिखिए (Spring), और अगर डेटा है तो उसे फंक्शन की तरह कॉल कीजिए (SomeInt(2))।
let spring = Spring
let integerTwo = SomeInt(2)
Gleam में हर चीज़ की तरह कस्टम टाइप में भी स्ट्रक्चरल इक्वलिटी होती है, यानी एक ही वेरिएंट की और एक ही डेटा वाली दो वैल्यू बराबर होती हैं।
Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False
कस्टम टाइप के वेरिएंट पर case एक्सप्रेशन की मदद से पैटर्न मैचिंग की जा सकती है।
import gleam/int
import gleam/float
pub fn describe(flexible_number: Number) -> String {
case flexible_number {
SomeFloat(f) -> "Float: " <> float.to_string(f)
SomeInt(i) -> "Int: " <> int.to_string(i)
Invalid -> "Neither a float nor an int"
}
}
इस अभ्यास में वैलेंटाइन डे है। आप और आपका साथी मिलकर कुछ अच्छा करने की योजना बना रहे हैं। आपके साथी के पास बहुत सारे आइडिया हैं। अब वह आपसे इन आइडिया को रेट करने के लिए कह रहा है, ताकि तय हो सके कि कौन-सी गतिविधि की जाए।
आपके साथी ने ये आइडिया सुझाए हैं:
अपने वैलेंटाइन डे की गतिविधि चुनने में मदद के लिए आपके पास छह टास्क हैं।
आपके साथी जो भी आइडिया सुझाता है, उस पर आप तीन में से एक जवाब देते हैं: हाँ, नहीं या शायद।
इन विकल्पों को दर्शाने के लिए Approval कस्टम टाइप को इन तीन केस के रूप में परिभाषित कीजिए: Yes, No और Maybe.
आपके साथी ने दो रेस्टोरेंट चुने हैं: एक कोरियन क्यूज़ीन पर आधारित और दूसरा तुर्की क्यूज़ीन पर।
इन क्यूज़ीन को दर्शाने के लिए Cuisine कस्टम टाइप को इन दो केस के रूप में परिभाषित कीजिए: Korean और Turkish.
चुनने के लिए बहुत सारी फिल्में हैं, इसलिए विकल्प कम करने के लिए आपका साथी हर फिल्म की शैली भी बताता है।
इन शैलियों को केस के रूप में दर्शाने के लिए Genre कस्टम टाइप को परिभाषित कीजिए: Crime, Horror, Romance और Thriller.
जैसा कहा गया, आपके साथी ने पाँच अलग-अलग गतिविधियाँ सुझाई हैं: बोर्ड गेम खेलना, आराम करना, फिल्म देखना, रेस्टोरेंट जाना और टहलने जाना।
इन गतिविधि प्रकारों को दर्शाने के लिए Activity कस्टम टाइप को परिभाषित कीजिए:
BoardGame: कोई जुड़ा हुआ डेटा नहीं।Chill: कोई जुड़ा हुआ डेटा नहीं।Movie: इसका Genre जुड़े हुए डेटा के रूप में होता है।Restaurant: इसका Cuisine जुड़े हुए डेटा के रूप में होता है।Walk: इसमें चलने की दूरी को किलोमीटर में दर्शाने वाला एक Int जुड़े हुए डेटा के रूप में होता है।अब आप अपने साथी के आइडिया को रेट करने के लिए तैयार हैं। आपके साथी के हर आइडिया पर आपकी राय यह है:
ऊपर बताई गई राय के आधार पर एक Activity वैल्यू लेकर Approval लौटाने वाला rate_activity नाम का फंक्शन बनाइए:
rate_activity(Restaurant(Turkish))
// -> Maybe
Exercism पर साइन अप कीजिए और Gleam को 33 कॉन्सेप्ट122 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।