Elm में कस्टम टाइप एक निश्चित संख्या के नामित केसों को दर्शाते हैं। हर वैल्यू उन नामित केसों में से ठीक एक से मेल खाती है।
कस्टम टाइप को type कीवर्ड से बनाया जाता है और इसमें बहुत कम सिंटैक्स लगता है। ये Elm प्रोग्रामिंग की सबसे ज़रूरी तकनीकों में से एक हैं। इनकी मदद से कोड में मौजूद संभावित वैल्यू वास्तविक जीवन की वैध वैल्यू से बिल्कुल मेल खाने लगती हैं। इससे अमान्य डेटा के लिए कोई जगह नहीं बचती और कोड में असंभव स्थितियों को दर्शाना असंभव हो जाता है।
type Season
= Spring
| Summer
| Autumn
| Winter
कस्टम टाइप के हर केस के साथ वैकल्पिक रूप से डेटा जुड़ा हो सकता है, और अलग-अलग केसों के साथ अलग-अलग तरह का डेटा हो सकता है। अगर किसी भी केस के साथ डेटा नहीं जुड़ा है, तो यह डिस्क्रिमिनेटेड यूनियन वैसा ही होता है जैसा दूसरी भाषाएँ आम तौर पर एन्यूमरेशन (या एनम) कहती हैं।
type FlexibleNumber
= Integer Int
| Float Float
| Invalid
किसी खास केस की वैल्यू बनाने के लिए आप उसका नाम (Spring) लिख सकते हैं, बशर्ते वह केस उसी मॉड्यूल में बनाया गया हो, या import SeasonModule exposing (Season(..)) शैली के सिंटैक्स से इम्पोर्ट किया गया हो। इसी तरह, अगर केस import SeasonModule exposing (Season) शैली के सिंटैक्स से इम्पोर्ट किया गया हो, तो आप उसका पूरा नाम (Season.Spring) लिखकर भी वैल्यू बना सकते हैं।
integerTwo = Integer 2
invalid = FlexibleNumber.Invalid
कस्टम टाइप में, और Elm की हर चीज़ में, स्ट्रक्चरल इक्वैलिटी होती है। इसका मतलब है कि एक ही केस की और एक ही (वैकल्पिक) डेटा वाली दो वैल्यू बराबर होती हैं।
कस्टम टाइप के साथ काम करने का पसंदीदा तरीका पैटर्न मैचिंग है:
let describe flexibleNumber =
case flexibleNumber of
Integer i ->
"Integer: " ++ fromInt(i)
Float f ->
"Float: " ++ fromFloat(f)
Invalid ->
"Invalid"
इस अभ्यास में वैलेंटाइन डे है और आप अपने पार्टनर के साथ मिलकर कुछ अच्छा करने की योजना बना रहे हैं। आपके पार्टनर के पास बहुत सारे आइडिया हैं, और अब वे आपसे इन आइडिया को रेटिंग देने के लिए कह रहे हैं, ताकि तय हो सके कि किस एक्टिविटी में हिस्सा लेना है।
आपके पार्टनर ने ये आइडिया सुझाए हैं:
अपनी वैलेंटाइन डे एक्टिविटी चुनने में मदद के लिए आपके पास छह टास्क हैं।
Approval बनाइएआपके पार्टनर जो भी आइडिया सुझाते हैं, उनमें से हर एक पर आप तीन विकल्पों में से एक जवाब देते हैं: yes, no या maybe.
इन विकल्पों को दर्शाने के लिए Approval कस्टम टाइप बनाइए, जिसमें ये तीन केस हों: Yes, No और Maybe.
Cuisine बनाइएआपके पार्टनर ने दो रेस्टोरेंट चुने हैं: एक Korean व्यंजन पर आधारित और दूसरा Turkish व्यंजन पर आधारित।
इन व्यंजनों को दर्शाने के लिए Cuisine कस्टम टाइप बनाइए, जिसमें ये दो केस हों: Korean और Turkish.
Genre बनाइएचुनने के लिए बहुत सारी मूवी हैं, इसलिए चुनाव को थोड़ा सीमित करने के लिए आपके पार्टनर ने मूवी का जॉनर भी बता दिया है।
इन जॉनर को केस के रूप में दर्शाने के लिए Genre कस्टम टाइप बनाइए: Crime, Horror, Romance और Thriller.
Activity बनाइएजैसा कि कहा गया, आपके पार्टनर पाँच अलग-अलग एक्टिविटी सुझा चुके हैं: बोर्ड गेम खेलना, आराम करना, मूवी देखना और रेस्टोरेंट जाना।
इन एक्टिविटी टाइप को दर्शाने के लिए Activity कस्टम टाइप बनाइए:
BoardGame: इसके साथ कोई डेटा नहीं जुड़ा होता।Chill: इसके साथ कोई डेटा नहीं जुड़ा होता।Movie: इसके साथ उसका Genre डेटा जुड़ा होता है।Restaurant: इसके साथ उसका Cuisine डेटा जुड़ा होता है।अब आप अपने पार्टनर के आइडिया को रेटिंग देने के लिए तैयार हैं। आपके पार्टनर के हर आइडिया पर आपकी राय कुछ इस तरह है:
ऊपर बताई गई भावनाओं के आधार पर rateActivity नाम का एक फंक्शन बनाइए, जो एक Activity वैल्यू लेता है और Approval लौटाता है:
rateActivity (Restaurant Turkish)
-- => Maybe
Exercism पर साइन अप कीजिए और Elm को 28 कॉन्सेप्ट110 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।