Elixir में फंक्शन को फर्स्ट क्लास सिटिज़न माना जाता है। इसका मतलब है कि:
नेम्ड फंक्शन के विपरीत, अनाम फंक्शन के पास कोई स्थायी रेफरेंस उपलब्ध नहीं होता; वे तभी उपलब्ध होते हैं जब उन्हें किसी वेरिएबल में असाइन किया जाए या तुरंत इनवोक किया जाए।
हम अनाम फंक्शन का उपयोग इन कामों के लिए कर सकते हैं:
अनाम फंक्शन आरक्षित शब्द fn से शुरू होते हैं, आर्गुमेंट को फंक्शन की बॉडी से -> टोकन के ज़रिए अलग किया जाता है, और उनका अंत end से होता है। नेम्ड फंक्शन की तरह ही, फंक्शन का अंतिम एक्सप्रेशन कॉल करने वाले फंक्शन को अंतर्निहित रूप से लौटाया जाता है।
किसी फंक्शन रेफरेंस को इनवोक करने के लिए आपको रेफरेंस वेरिएबल और आर्गुमेंट के बीच एक . लगाना होता है:
function_variable = fn param ->
param + 1
end
function_variable.(1)
# => 2
इसे और संक्षिप्त बनाने के लिए आप शॉर्टहैंड कैप्चर नोटेशन का भी उपयोग कर सकते हैं:
variable = &(&1 + 1)
variable.(1)
# => 2
Elixir में बिट्स के साथ काम करने वाले कई फंक्शन हैं, जो Bitwise मॉड्यूल में मिलते हैं।
band/2: बिटवाइज़ ANDbsl/2: बिटवाइज़ SHIFT LEFTbsr/2: बिटवाइज़ SHIFT RIGHTbxor/2: बिटवाइज़ XORbor/2: बिटवाइज़ ORbnot/1: बिटवाइज़ NOTयहाँ एक उदाहरण दिया गया है कि बिटवाइज़ फंक्शन का उपयोग कैसे किया जाता है:
Bitwise.bsl(1, 3)
# => 8
सभी बिटवाइज़ फंक्शन केवल पूर्णांकों पर ही काम करते हैं।
अगर आप Elixir का 1.9 या उससे पुराना वर्ज़न चला रहे हैं, तो Bitwise मॉड्यूल का उपयोग कर पाने के लिए आपको मॉड्यूल की परिभाषा की शुरुआत में require Bitwise कॉल करना होगा।
इस अभ्यास में आपको एक एन्क्रिप्शन डिवाइस का सॉफ्टवेयर लिखना है, जो डेटा पर तरह-तरह के बदलाव करके काम करता है। आपको ऐसा तरीका चाहिए जिससे आसान फंक्शनों को मिलाकर जटिल फंक्शन लचीले ढंग से बनाए जा सकें।
हर कार्य के लिए एक अनाम फंक्शन लौटाइए जिसे कॉल करने वाले स्कोप से कॉल किया जा सके।
हर फंक्शन को पूर्णांक आर्गुमेंट लेना चाहिए। Elixir में बिटवाइज़ ऑपरेशन करने के लिए भी पूर्णांक उपयुक्त होते हैं।
Secrets.secret_add/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उसमें secret_add को दिए गए आर्गुमेंट को जोड़ देता है।
adder = Secrets.secret_add(3)
adder.(2)
# => 5
Secrets.secret_subtract/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस आर्गुमेंट में से secret_subtract को दिए गए सीक्रेट को घटा देता है।
subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1
Secrets.secret_multiply/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उसे secret_multiply को दिए गए सीक्रेट से गुणा कर देता है।
multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21
Secrets.secret_divide/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उसे secret_divide को दिए गए सीक्रेट से भाग देता है।
divider = Secrets.secret_divide(3)
divider.(32)
# => 10
पूर्णांक विभाजन का उपयोग कीजिए ताकि आउटपुट अन्य फंक्शनों के अपेक्षित इनपुट से मेल खाए।
Secrets.secret_and/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस आर्गुमेंट तथा secret_and को दिए गए सीक्रेट पर बिटवाइज़ and ऑपरेशन करता है।
ander = Secrets.secret_and(1)
ander.(2)
# => 0
Secrets.secret_xor/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस आर्गुमेंट तथा secret_xor को दिए गए सीक्रेट पर बिटवाइज़ xor ऑपरेशन करता है।
xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2
Secrets.secret_combine/2 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस पर secret_combine को दिए गए दोनों फंक्शन क्रम से लागू कर देता है।
add_one = Secrets.secret_add(1)
multiply_by_2 = Secrets.secret_multiply(2)
combined = Secrets.secret_combine(add_one, multiply_by_2)
combined.(3)
# => 8
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।