Elixir में कोड को सामान्य और जेनेरिक इंटरफेस देने के लिए बिहेवियर का उपयोग होता है। साथ ही, जो भी मॉड्यूल किसी बिहेवियर को लागू करता है, वह अपनी अलग इम्प्लीमेंटेशन बना सकता है। ऐसा ही एक आम उदाहरण एक्सेस बिहेवियर है।
एक्सेस बिहेवियर एक सामान्य इंटरफेस देता है, जिससे की पर आधारित डेटा स्ट्रक्चर से डेटा निकाला जा सकता है। इसे मैप और कीवर्ड लिस्ट के लिए लागू किया गया है। अब चलिए देखते हैं कि मैप के साथ इसका उपयोग कैसे होता है, ताकि इसे समझना आसान हो जाए। एक्सेस बिहेवियर कहता है कि जब आपके पास कोई मैप हो, तो आप उसके बाद चौकोर ब्रैकेट लगा सकते हैं और फिर उस की का उपयोग करके उस की से जुड़ी वैल्यू निकाल सकते हैं।
# Suppose we have these two maps defined (note the difference in the key type)
my_map = %{key: "my value"}
your_map = %{"key" => "your value"}
# Obtain the value using the Access Behaviour
my_map[:key] == "my value"
your_map[:key] == nil
your_map["key"] == "your value"
अगर डेटा स्ट्रक्चर में वह की मौजूद नहीं है, तो आपको nil मिलता है। यह अनचाहे व्यवहार का कारण बन सकता है, क्योंकि इसमें कोई एरर नहीं आती। ध्यान दीजिए कि nil खुद भी एक्सेस बिहेवियर लागू करता है और किसी भी की के लिए हमेशा nil लौटाता है।
आप एक स्थानीय बास्केटबॉल टीम की वेबसाइट बनाए रखने के लिए एक वेब डेवलपमेंट टीम के साथ काम कर रहे हैं। वेब डेवलपमेंट टीम Elixir से कम परिचित है और तेज़ विकास को सुविधाजनक बनाने के लिए नेस्टेड मैप की श्रृंखला से डेटा निकालने वाला एक फंक्शन माँग रही है।
extract_from_path/2 फंक्शन को बनाइए, जो दो आर्गुमेंट लेता है:
data: बास्केटबॉल टीम के बारे में डेटा वाली एक नेस्टेड मैप संरचना।path: एक स्ट्रिंग, जिसमें डॉट से अलग कीज़ होती हैं और जिससे अंतिम की से जुड़ी वैल्यू प्राप्त की जाती है।यदि पथ में किसी भी बिंदु पर वैल्यू या की मौजूद न हो, तो nil लौटाया जाना चाहिए।
data = %{
"team_mascot" => %{
"animal" => "bear",
"actor" => %{
"first_name" => "Noel"
}
}
}
BasketballWebsite.extract_from_path(data, "team_mascot.animal")
# => "bear"
BasketballWebsite.extract_from_path(data, "team_mascot.colors")
# => nil
इस फंक्शन को बनाते समय Access Behaviour का उपयोग कीजिए।
नेस्टेड मैप डेटा संरचना के साथ काम करने के लिए Map या Kernel मॉड्यूल के किसी भी फंक्शन का उपयोग न कीजिए।
आपके कोड की समीक्षा करने वाला आपका सहकर्मी आपको Kernel मॉड्यूल के एक फंक्शन के बारे में बताता है, जो आपके कार्यान्वयन से बहुत मिलता-जुलता काम करता है।
इस Kernel मॉड्यूल फंक्शन का उपयोग करने के लिए get_in_path/2 बनाइए।
अपेक्षित आर्गुमेंट वही हैं जो भाग 1 में हैं।
BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।