Elixir फंक्शन को एक से अधिक क्लॉज़ देने की सुविधा देता है, जिससे ओपन-क्लोज़्ड प्रिंसिपल का पालन करना आसान हो जाता है। इससे बिखरा हुआ और हार्ड-कोडेड कंट्रोल लॉजिक लिखने की ज़रूरत नहीं पड़ती। आप ऐसे फंक्शन लिख सकते हैं जो अपना काम ठीक से करते हैं और जिनमें व्यवहार जोड़ना या हटाना आसान होता है।
इसके लिए Elixir में एक से अधिक फंक्शन क्लॉज़ और गार्ड उपलब्ध हैं:
def number(n) when n == 7 do
"Awesome, that's my favorite"
end
def number(_n) do
"That's not my favorite"
end
रन-टाइम पर Elixir सोर्स फाइल में ऊपर से नीचे तक जाँचता है कि किस फंक्शन क्लॉज़ को कॉल करना है।
जो वेरिएबल उपयोग नहीं होते, उनके नाम से पहले अंडरस्कोर लगाना चाहिए।
गार्ड यह तय करते हैं कि Elixir किसी फंक्शन को कॉल करे या न करे। इसके लिए गार्ड फंक्शन आर्गुमेंट की जाँच करते हैं। हर गार्ड when कीवर्ड से शुरू होता है, और उसके बाद एक बूलियन एक्सप्रेशन आता है। गार्ड फंक्शन खास तरह के फंक्शन होते हैं:
true या false वैल्यू ही लौटानी चाहिए।आम गार्ड की सूची Elixir के डॉक्युमेंटेशन में मिल सकती है। इसमें टाइप जाँच, साधारण अंकगणित, तुलना और सख्ती से बूलियन ऑपरेटर शामिल हैं।
फंक्शन एक या अधिक आर्गुमेंट के लिए डिफॉल्ट वैल्यू घोषित कर सकते हैं। आइए इस फंक्शन को देखें:
def number(n \\ 13), do: "That's not my favorite"
कंपाइल होने पर Elixir दो फंक्शन बनाता है: number/0 (कोई आर्गुमेंट नहीं) और number/1 (एक आर्गुमेंट)।
अगर एक से अधिक आर्गुमेंट की डिफॉल्ट वैल्यू तय की गई हो, तो छूटे हुए आर्गुमेंट की जगह भरने के लिए ये डिफॉल्ट वैल्यू बाएँ से दाएँ लागू की जाती हैं।
अगर फंक्शन में एक से अधिक क्लॉज़ हों, तो डिफॉल्ट आर्गुमेंट फंक्शन क्लॉज़ से पहले फंक्शन हेडर (बिना बॉडी वाला फंक्शन) में तय करने चाहिए:
def number(n \\ 13)
def number(n) when n < 10, do: "Dream bigger!"
def number(n) when n > 100, do: "Not that big..."
आप एक छोटा-सा ऑनलाइन गेम बना रहे हैं जिसमें कोई दोस्त एक गुप्त संख्या का अनुमान लगा सकता है। आप कुछ प्रतिक्रिया देना चाहते हैं, लेकिन अनुमान लगाने वाले को सीधे उत्तर नहीं बता देना चाहते। आपको एक फंक्शन बनाना है जो अनुमान और गुप्त संख्या के बीच संबंध के अनुसार अलग-अलग प्रतिक्रियाएँ दे।
| शर्त | प्रतिक्रिया |
|---|---|
| जब अनुमान गुप्त संख्या से मेल खाता है | "Correct" |
| जब अनुमान गुप्त संख्या से एक अधिक या एक कम है | "So close" |
| जब अनुमान गुप्त संख्या से बड़ा है | "Too high" |
| जब अनुमान गुप्त संख्या से छोटा है | "Too low" |
| जब कोई अनुमान नहीं लगाया जाता | "Make a guess" |
सभी अनुमान और गुप्त संख्याएँ पूर्णांक होती हैं।
compare/2 फंक्शन बनाइए जो दो आर्गुमेंट लेता है, secret_number और guess, और दोनों पूर्णांक होते हैं।
GuessingGame.compare(5, 5)
# => "Correct"
compare फंक्शन में बदलाव कीजिए ताकि यह उन अनुमानों पर प्रतिक्रिया दे जो गुप्त संख्या से बड़े हैं।
GuessingGame.compare(5, 8)
# => "Too high"
compare फंक्शन में बदलाव कीजिए ताकि यह उन अनुमानों पर प्रतिक्रिया दे जो गुप्त संख्या से छोटे हैं।
GuessingGame.compare(5, 2)
# => "Too low"
compare फंक्शन में बदलाव कीजिए ताकि यह गुप्त संख्या के करीब के अनुमानों पर प्रतिक्रिया दे।
GuessingGame.compare(5, 6)
# => "So close"
GuessingGame.compare(5, 4)
# => "So close"
compare फंक्शन में बदलाव कीजिए ताकि कोई अनुमान न होने पर भी यह प्रतिक्रिया दे।
GuessingGame.compare(5)
# => "Make a guess"
GuessingGame.compare(5, :no_guess)
# => "Make a guess"
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।