प्रोटोकॉल 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 प्रोटोकॉल बनाने का फैसला किया, जिसे कुछ आइटम लागू कर सकते हैं।
RPG.Edible प्रोटोकॉल बनाइए। इस प्रोटोकॉल में एक फंक्शन है, eat। eat फंक्शन एक आइटम और एक पात्र लेता है, और एक उपोत्पाद तथा एक पात्र लौटाता है।
RPG.LoafOfBread आइटम के लिए RPG.Edible प्रोटोकॉल लागू कीजिए। खाने पर ब्रेड का एक लोफ पात्र को 5 हेल्थ पॉइंट देता है और इससे कोई उपोत्पाद नहीं बनता।
RPG.Edible.eat(%RPG.LoafOfBread{}, %RPG.Character{health: 31})
# => {nil, %RPG.Character{health: 36, mana: 0}}
RPG.ManaPotion आइटम के लिए RPG.Edible प्रोटोकॉल लागू कीजिए। खाने पर एक माना पोशन पात्र को उतने ही माना पॉइंट देता है जितनी पोशन की शक्ति होती है, और एक खाली बोतल बनाता है।
RPG.Edible.eat(%RPG.ManaPotion{strength: 13}, %RPG.Character{mana: 50})
# => {%RPG.EmptyBottle{}, %RPG.Character{health: 100, mana: 63}}
RPG.Poison आइटम के लिए RPG.Edible प्रोटोकॉल लागू कीजिए। खाने पर ज़हर पात्र से सारे हेल्थ पॉइंट छीन लेता है, और एक खाली बोतल बनाता है।
RPG.Edible.eat(%RPG.Poison{}, %RPG.Character{health: 3000})
# => {%RPG.EmptyBottle{}, %RPG.Character{health: 0, mana: 0}}
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।