रहस्य

रहस्य

सीखने का अभ्यास

परिचय

अनाम फंक्शन

Elixir में फंक्शन को फर्स्ट क्लास सिटिज़न माना जाता है। इसका मतलब है कि:

  • नेम्ड और अनाम फंक्शन को वेरिएबलो में असाइन किया जा सकता है।
  • नेम्ड और अनाम फंक्शन को डेटा की तरह आर्गुमेंट और रिटर्न वैल्यू के रूप में पास किया जा सकता है।
  • अनाम फंक्शन को डायनैमिक रूप से बनाया जा सकता है।

नेम्ड फंक्शन के विपरीत, अनाम फंक्शन के पास कोई स्थायी रेफरेंस उपलब्ध नहीं होता; वे तभी उपलब्ध होते हैं जब उन्हें किसी वेरिएबल में असाइन किया जाए या तुरंत इनवोक किया जाए।

हम अनाम फंक्शन का उपयोग इन कामों के लिए कर सकते हैं:

  • लेक्सिकल स्कोप (जिसे क्लोज़र भी कहते हैं) का उपयोग करके डेटा छिपाना।
  • रन-टाइम पर फंक्शन को डायनैमिक रूप से बनाना।

अनाम फंक्शन आरक्षित शब्द fn से शुरू होते हैं, आर्गुमेंट को फंक्शन की बॉडी से -> टोकन के ज़रिए अलग किया जाता है, और उनका अंत end से होता है। नेम्ड फंक्शन की तरह ही, फंक्शन का अंतिम एक्सप्रेशन कॉल करने वाले फंक्शन को अंतर्निहित रूप से लौटाया जाता है।

किसी फंक्शन रेफरेंस को इनवोक करने के लिए आपको रेफरेंस वेरिएबल और आर्गुमेंट के बीच एक . लगाना होता है:

function_variable = fn param ->
  param + 1
end

function_variable.(1)
# => 2

इसे और संक्षिप्त बनाने के लिए आप शॉर्टहैंड कैप्चर नोटेशन का भी उपयोग कर सकते हैं:

variable = &(&1 + 1)

variable.(1)
# => 2

बिट मैनिपुलेशन

Elixir में बिट्स के साथ काम करने वाले कई फंक्शन हैं, जो Bitwise मॉड्यूल में मिलते हैं।

  • band/2: बिटवाइज़ AND
  • bsl/2: बिटवाइज़ SHIFT LEFT
  • bsr/2: बिटवाइज़ SHIFT RIGHT
  • bxor/2: बिटवाइज़ XOR
  • bor/2: बिटवाइज़ OR
  • bnot/1: बिटवाइज़ NOT

यहाँ एक उदाहरण दिया गया है कि बिटवाइज़ फंक्शन का उपयोग कैसे किया जाता है:

Bitwise.bsl(1, 3)
# => 8

सभी बिटवाइज़ फंक्शन केवल पूर्णांकों पर ही काम करते हैं।

अगर आप Elixir का 1.9 या उससे पुराना वर्ज़न चला रहे हैं, तो Bitwise मॉड्यूल का उपयोग कर पाने के लिए आपको मॉड्यूल की परिभाषा की शुरुआत में require Bitwise कॉल करना होगा।

निर्देश

इस अभ्यास में आपको एक एन्क्रिप्शन डिवाइस का सॉफ्टवेयर लिखना है, जो डेटा पर तरह-तरह के बदलाव करके काम करता है। आपको ऐसा तरीका चाहिए जिससे आसान फंक्शनों को मिलाकर जटिल फंक्शन लचीले ढंग से बनाए जा सकें।

हर कार्य के लिए एक अनाम फंक्शन लौटाइए जिसे कॉल करने वाले स्कोप से कॉल किया जा सके।

हर फंक्शन को पूर्णांक आर्गुमेंट लेना चाहिए। Elixir में बिटवाइज़ ऑपरेशन करने के लिए भी पूर्णांक उपयुक्त होते हैं।

1. जोड़ने वाला फंक्शन बनाइए

Secrets.secret_add/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उसमें secret_add को दिए गए आर्गुमेंट को जोड़ देता है।

adder = Secrets.secret_add(3)
adder.(2)
# => 5

2. घटाने वाला फंक्शन बनाइए

Secrets.secret_subtract/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस आर्गुमेंट में से secret_subtract को दिए गए सीक्रेट को घटा देता है।

subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1

3. गुणा करने वाला फंक्शन बनाइए

Secrets.secret_multiply/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उसे secret_multiply को दिए गए सीक्रेट से गुणा कर देता है।

multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21

4. भाग देने वाला फंक्शन बनाइए

Secrets.secret_divide/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उसे secret_divide को दिए गए सीक्रेट से भाग देता है।

divider = Secrets.secret_divide(3)
divider.(32)
# => 10

पूर्णांक विभाजन का उपयोग कीजिए ताकि आउटपुट अन्य फंक्शनों के अपेक्षित इनपुट से मेल खाए।

5. "and" करने वाला फंक्शन बनाइए

Secrets.secret_and/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस आर्गुमेंट तथा secret_and को दिए गए सीक्रेट पर बिटवाइज़ and ऑपरेशन करता है।

ander = Secrets.secret_and(1)
ander.(2)
# => 0

6. "xor" करने वाला फंक्शन बनाइए

Secrets.secret_xor/1 बनाइए। इसे एक ऐसा फंक्शन लौटाना चाहिए जो एक आर्गुमेंट लेता है और उस आर्गुमेंट तथा secret_xor को दिए गए सीक्रेट पर बिटवाइज़ xor ऑपरेशन करता है।

xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2

7. फंक्शनों को जोड़ने वाला फंक्शन बनाइए

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
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Elixir Exercism

रहस्य शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।