ट्रैक
/
Elixir
Elixir
/
अभ्यास
/
रोटी और औषधियाँ
रोटी और औषधियाँ

रोटी और औषधियाँ

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

परिचय

प्रोटोकॉल

प्रोटोकॉल Elixir में पॉलिमॉर्फिज़्म लाने का एक तरीका हैं। इनकी ज़रूरत तब होती है जब आप चाहते हैं कि व्यवहार डेटा टाइप के आधार पर बदले।

प्रोटोकॉल defprotocol की मदद से परिभाषित किए जाते हैं और इनमें एक या अधिक फंक्शन हेडर होते हैं।

defprotocol Reversible do
  def reverse(term)
end

प्रोटोकॉल defimpl की मदद से लागू किए जा सकते हैं।

defimpl Reversible, for: List do
  def reverse(term) do
    Enum.reverse(term)
  end
end

किसी भी मौजूदा Elixir डेटा टाइप के लिए या किसी स्ट्रक्ट के लिए प्रोटोकॉल लागू किया जा सकता है।

जब किसी प्रोटोकॉल फंक्शन को कॉल किया जाता है, तो पहले आर्गुमेंट के टाइप के आधार पर सही इम्प्लीमेंटेशन अपने आप चुन लिया जाता है।

निर्देश

आप अपना खुद का रोल-प्लेइंग वीडियो गेम बना रहे हैं। आपके गेम में पात्र और आइटम होते हैं। किसी आइटम के साथ आप जो कई काम कर सकते हैं, उनमें से एक है किसी पात्र से उसे खिलवाना।

सारे आइटम खाने योग्य नहीं होते, और सारे खाने योग्य आइटम पात्र पर एक जैसा असर नहीं डालते। कुछ आइटम खाने पर किसी दूसरे आइटम में बदल जाते हैं (जैसे अगर आप सेब खाते हैं, तो आपके पास सेब का बीजकोष बचता है)।

इतना लचीलापन देने के लिए आपने एक Edible प्रोटोकॉल बनाने का फैसला किया, जिसे कुछ आइटम लागू कर सकते हैं।

1. खाने योग्यता को परिभाषित कीजिए

RPG.Edible प्रोटोकॉल बनाइए। इस प्रोटोकॉल में एक फंक्शन है, eat। eat फंक्शन एक आइटम और एक पात्र लेता है, और एक उपोत्पाद तथा एक पात्र लौटाता है।

2. ब्रेड के लोफ को खाने योग्य बनाइए

RPG.LoafOfBread आइटम के लिए RPG.Edible प्रोटोकॉल लागू कीजिए। खाने पर ब्रेड का एक लोफ पात्र को 5 हेल्थ पॉइंट देता है और इससे कोई उपोत्पाद नहीं बनता।

RPG.Edible.eat(%RPG.LoafOfBread{}, %RPG.Character{health: 31})
# => {nil, %RPG.Character{health: 36, mana: 0}}

3. माना पोशन को खाने योग्य बनाइए

RPG.ManaPotion आइटम के लिए RPG.Edible प्रोटोकॉल लागू कीजिए। खाने पर एक माना पोशन पात्र को उतने ही माना पॉइंट देता है जितनी पोशन की शक्ति होती है, और एक खाली बोतल बनाता है।

RPG.Edible.eat(%RPG.ManaPotion{strength: 13}, %RPG.Character{mana: 50})
# => {%RPG.EmptyBottle{}, %RPG.Character{health: 100, mana: 63}}

4. ज़हर को खाने योग्य बनाइए

RPG.Poison आइटम के लिए RPG.Edible प्रोटोकॉल लागू कीजिए। खाने पर ज़हर पात्र से सारे हेल्थ पॉइंट छीन लेता है, और एक खाली बोतल बनाता है।

RPG.Edible.eat(%RPG.Poison{}, %RPG.Character{health: 3000})
# => {%RPG.EmptyBottle{}, %RPG.Character{health: 0, mana: 0}}
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Elixir Exercism

रोटी और औषधियाँ शुरू करने के लिए तैयार हैं?

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