Elixir का atom टाइप एक निश्चित स्थिरांक को दर्शाता है। एटम की वैल्यू बस उसका अपना नाम होती है। इससे हमें डेटा के साथ काम करने का एक ऐसा तरीका मिलता है जो टाइप की दृष्टि से सुरक्षित है। एटम को इस तरह बनाया जा सकता है:
# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom
एटम को अंदर से एक लुकअप टेबल में एक पूर्णांक से दर्शाया जाता है, और ये पूर्णांक अपने आप तय हो जाते हैं। इस आंतरिक वैल्यू को बदलना संभव नहीं है।
अक्सर हमें ऐसा कोड लिखना होता है जो किसी शर्त के आधार पर अलग-अलग रास्ते चुन सके। Elixir में ऐसा करने के कई तरीके हैं, लेकिन सबसे आसान तरीकों में से एक है cond/1 का इस्तेमाल करना।
सबसे सरल रूप में, cond एक या अधिक शाखाओं में से उस पहले मार्ग पर चलता है जो true निकलता है:
cond do
x > 10 -> :this_might_be_the_way
y < 7 -> :or_that_might_be_the_way
true -> :this_is_the_default_way
end
अगर कोई भी मार्ग true न निकले, तो रनटाइम एक एरर उठाता है।
आप एक ऐसा सिस्टम चला रहे हैं जिसमें कुछ एप्लिकेशन बहुत सारे लॉग बनाते हैं। आप एक छोटा प्रोग्राम लिखना चाहते हैं जो इन लॉग को इकट्ठा करे और उनकी गंभीरता के स्तर के अनुसार उन्हें लेबल दे। आपके सिस्टम के सभी एप्लिकेशन एक ही लॉग कोड इस्तेमाल करते हैं, लेकिन कुछ पुराने एप्लिकेशन सभी कोड का समर्थन नहीं करते।
| लॉग कोड | लॉग लेबल | पुराने एप्लिकेशन में समर्थित? |
|---|---|---|
| 0 | trace | नहीं |
| 1 | debug | हाँ |
| 2 | info | हाँ |
| 3 | warning | हाँ |
| 4 | error | हाँ |
| 5 | fatal | नहीं |
| अन्य / असमर्थित | unknown | - |
LogLevel.to_label/2 फंक्शन बनाइए। यह एक पूर्णांक कोड और एक बूलियन फ्लैग लेता है, जो बताता है कि लॉग किसी पुराने एप्लिकेशन से आया है या नहीं, और लॉग लाइन के लेबल को एक एटम के रूप में लौटाता है।
जो लॉग कोड तालिका में नहीं दिए गए हैं, उनके लिए unknown लेबल लौटना चाहिए। जिन लॉग कोड के बारे में तालिका कहती है कि वे पुराने एप्लिकेशन में समर्थित नहीं हैं, उनके लिए भी unknown लेबल लौटना चाहिए, अगर वह लॉग किसी पुराने एप्लिकेशन से आया हो।
LogLevel.to_label(0, false)
# => :trace
LogLevel.to_label(0, true)
# => :unknown
जब कुछ अनपेक्षित होता है, तो किसी को सूचना देनी पड़ती है।
LogLevel.alert_recipient/2 फंक्शन बनाइए, जो तय करता है कि अलर्ट किसे भेजा जाना चाहिए। यह फंक्शन एक पूर्णांक कोड और एक बूलियन फ्लैग लेता है, जो बताता है कि लॉग किसी पुराने एप्लिकेशन से आया है या नहीं, और प्राप्तकर्ता का नाम एक एटम के रूप में लौटाता है।
पिछले टास्क वाले LogLevel.to_label/2 फंक्शन का इस्तेमाल कीजिए। अगर लॉग लेबल error या fatal है, तो अलर्ट ops टीम को भेजिए। अगर आपको किसी पुराने सिस्टम से unknown लेबल वाला लॉग मिलता है, तो अलर्ट dev1 टीम को भेजिए; बाकी unknown लेबल dev2 टीम को भेजे जाने चाहिए। बाकी सभी लॉग लेबल को false लौटाकर छोड़ा जा सकता है।
LogLevel.alert_recipient(-1, true)
# => :dev1
LogLevel.alert_recipient(0, false)
# => false
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।