Elixir में टपल एक डेटा स्ट्रक्चर है जो डेटा को व्यवस्थित करता है। इसमें किसी भी प्रकार की एक तय संख्या में चीज़ें रखी जा सकती हैं, लेकिन हर एलिमेंट के लिए कोई अलग नाम नहीं होता। Elixir में टपल का इस्तेमाल अक्सर ऐसे कामों के लिए किया जाता है जिनमें मेमोरी से बहुत पढ़ना पड़ता है, क्योंकि किसी एलिमेंट को पढ़ने में लगने वाला समय हर बार एक जैसा रहता है। इनका इस्तेमाल आम तौर पर ऐसे मामलों में नहीं होता जहाँ एलिमेंट जोड़ने या हटाने की ज़रूरत बार-बार पड़े, क्योंकि मौजूदा टपल को बदलने के बजाय एक नया टपल बनाया जाता है, और उसके लिए पहले से मेमोरी आवंटित करनी पड़ती है।
व्यवहार में, Elixir में टपल घुंघराले ब्रैकेट से बनाए जाते हैं। टपल के एलिमेंट को elem/2 फंक्शन से अलग-अलग पढ़ा जा सकता है, जहाँ इंडेक्स 0 से शुरू होता है:
empty_tuple = {}
one_element_tuple = {1}
multiple_element_tuple = {1, :a, "hello"}
elem(multiple_element_tuple, 2)
# => "hello"
व्यवहार में टपल का इस्तेमाल अक्सर जानकारी को एक समूह के रूप में दिखाने के लिए किया जाता है।
Float.ratio(0.25)
# => {1, 4} indicating the numerator and denominator of the fraction ¼
Elixir में जो कोड आत्मविश्वास के साथ और भाषा की अपनी शैली में लिखा जाता है, उसमें पैटर्न मैचिंग का बहुत इस्तेमाल होता है। आपको याद होगा कि =/2 को असाइनमेंट ऑपरेटर नहीं, बल्कि मैच ऑपरेटर कहा जाता है। मैच ऑपरेटर इस्तेमाल करते समय, अगर बाईं ओर का पैटर्न दाईं ओर से मेल खाता है, तो बाईं ओर के वेरिएबलो को बाँध दिया जाता है और दाईं ओर की वैल्यू लौटा दी जाती है। अगर मेल नहीं खाता, तो एक MatchError मिलती है।
2 = 2
# => 2
# Literals can be matched if they are the same
2 = 3
# => ** (MatchError) no match of right hand side value: 3
{_, denominator} = Float.ratio(0.25)
# => {1, 4}
# the variable `denominator` is bound to the value 4
याद रखिए, मैच दाईं ओर से बाईं ओर की तरफ होते हैं।
पिछले उदाहरण में, अगर पैटर्न मैच में किसी वेरिएबल की ज़रूरत नहीं है, तो हम _ लिखकर उसे छोड़ सकते हैं। जो भी वेरिएबल _ से शुरू होता है, रनटाइम उसका हिसाब नहीं रखता।
कई फंक्शन क्लॉज़ बनाते समय पैटर्न मैचिंग भी बहुत काम की चीज़ है। पैटर्न मैचिंग का इस्तेमाल फंक्शन के आर्गुमेंट पर किया जा सकता है, और इससे तय होता है कि कौन-सा फंक्शन क्लॉज़ कॉल किया जाएगा। यह फाइल में सबसे ऊपर से शुरू होकर नीचे की ओर चलता है, जब तक पहला मैच न मिल जाए। वेरिएबलो को फंक्शन हेड में बाँधा जा सकता है और फंक्शन बॉडी में इस्तेमाल किया जा सकता है।
defmodule Example do
def named_function(:a = variable_a) do
{variable_a, 1}
end
def named_function(:b = variable_b) do
{variable_b, 2}
end
end
Example.named_function(:a)
# => {:a, 1}
Example.named_function(:b)
# => {:b, 2}
Example.named_function(:c)
# => ** (FunctionClauseError) no function clause matching in Example.named_function/1
अपने दोस्तों के लिए कुकीज़ बनाने की तैयारी करते समय आपको पता चला कि रेसिपी में इस्तेमाल हुई कुछ मात्राएँ बदलनी पड़ेंगी। आप मीट्रिक प्रणाली से ही परिचित हैं, इसलिए अपनी सुविधा के लिए आपको बेकिंग में इस्तेमाल होने वाली आम अमेरिकी मात्राओं को मिलीलीटर (mL) में बदलने का तरीका निकालना है।
अपने हल के लिए इस रूपांतरण चार्ट का उपयोग कीजिए:
| बदलने वाली इकाई | मात्रा | मिलीलीटर (mL) में |
|---|---|---|
| mL | 1 | 1 |
| अमेरिकी कप | 1 | 240 |
| अमेरिकी द्रव औंस | 1 | 30 |
| अमेरिकी छोटा चम्मच | 1 | 5 |
| अमेरिकी बड़ा चम्मच | 1 | 15 |
आप एक होनहार प्रशिक्षु प्रोग्रामर हैं, इसलिए आप मिलीलीटर को बीच की इकाई बनाने का तरीका चुनते हैं। इससे सूची में दी गई किसी भी इकाई से किसी भी दूसरी इकाई में, यहाँ तक कि उसी इकाई में भी, बदलना आसान हो जाता है।
KitchenCalculator.get_volume/1 फंक्शन बनाइए। इसे मात्रा जोड़ी वाला एक टपल मिलता है, और इसे सिर्फ संख्यात्मक भाग लौटाना चाहिए।
KitchenCalculator.get_volume({:cup, 2.0})
# => 2.0
KitchenCalculator.to_milliliter/1 फंक्शन बनाइए। इसे मात्रा जोड़ी वाला एक टपल मिलता है, और इसे रूपांतरण चार्ट का उपयोग करके उस मात्रा को मिलीलीटर में बदलना चाहिए।
हर इकाई के लिए अलग फंक्शन बनाने के लिए कई फंक्शन क्लॉज़ और पैटर्न मैचिंग का उपयोग कीजिए। हर इकाई को दर्शाने वाले एटम ये हैं: :cup, :fluid_ounce, :teaspoon, :tablespoon, :milliliter. बदलाव के नतीजे को एक टपल में लपेटकर लौटाइए।
KitchenCalculator.to_milliliter({:cup, 2.5})
# => {:milliliter, 600.0}
KitchenCalculator.from_milliliter/2 फंक्शन बनाइए। इसे मात्रा जोड़ी वाला एक टपल और मनचाही इकाई मिलती है, और इसे रूपांतरण चार्ट का उपयोग करके उस मात्रा को मनचाही इकाई में बदलना चाहिए।
हर इकाई के लिए अलग फंक्शन बनाने के लिए कई फंक्शन क्लॉज़ और पैटर्न मैचिंग का उपयोग कीजिए। हर इकाई को दर्शाने वाले एटम ये हैं: :cup, :fluid_ounce, :teaspoon, :tablespoon, :milliliter
KitchenCalculator.from_milliliter({:milliliter, 1320.0}, :cup)
# => {:cup, 5.5}
KitchenCalculator.convert/2 फंक्शन बनाइए। इसे मात्रा जोड़ी वाला एक टपल और मनचाही इकाई मिलती है, और इसे दी गई मात्रा को मनचाही इकाई में बदलना चाहिए।
KitchenCalculator.convert({:teaspoon, 9.0}, :tablespoon)
# => {:tablespoon, 3.0}
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।