Elixir में किसी एन्यूमरेबल डेटा स्ट्रक्चर (जैसे ऐरे या रेंज) से एक रैंडम एलिमेंट चुनने के लिए हम Enum.random का इस्तेमाल करते हैं। यह फंक्शन एक ही एलिमेंट चुनता है, और हर एलिमेंट के चुने जाने की संभावना बराबर होती है।
रैंडम दशमलव संख्या चुनने के लिए Elixir के पास अपने फंक्शन नहीं हैं। इसके लिए हमें सीधे Erlang का इस्तेमाल करना पड़ता है।
Elixir का कोड BEAM वर्चुअल मशीन पर चलता है। BEAM, Erlang रन-टाइम सिस्टम का हिस्सा है। Erlang से प्रेरणा लेने और उसका रन एनवायरनमेंट साझा करने के कारण Elixir, Erlang लाइब्रेरी के साथ बहुत अच्छी तरह मिलकर काम करता है। इसका मतलब है कि Elixir डेवलपर अपने Elixir कोड के अंदर से Erlang लाइब्रेरी का इस्तेमाल कर सकते हैं। वास्तव में, Erlang लाइब्रेरी पहले से जो सुविधाएँ देती हैं, उनके लिए Elixir लाइब्रेरी लिखने की सलाह Elixir समुदाय में नहीं दी जाती।
इस वजह से गणित के काम या टाइमर फंक्शन जैसी कुछ सुविधाएँ Elixir में सिर्फ Erlang के ज़रिए ही उपलब्ध हैं।
Erlang की स्टैंडर्ड लाइब्रेरी हमारे Elixir कोड में बिना कोई अतिरिक्त कदम उठाए इस्तेमाल की जा सकती है।
Erlang के फंक्शन उसी तरह कॉल किए जा सकते हैं जैसे हम Elixir के फंक्शन कॉल करते हैं, बस एक छोटा-सा फर्क है। Erlang मॉड्यूल के नाम snake_case एटम होते हैं। जैसे, math मॉड्यूल से Erlang का pi/0 फंक्शन कॉल करने के लिए हम ऐसे लिखेंगे:
:math.pi()
# => 3.141592653589793
जो Erlang फंक्शन सबसे ज़्यादा इस्तेमाल होते हैं और जिनके लिए Elixir में कोई समान फंक्शन नहीं है, वे ये हैं:
:timer.sleep/1, जो किसी प्रोसेस को दिए गए मिलीसेकंड के लिए रोक देता है।:rand.uniform/0, जो एक रैंडम दशमलव संख्या x बनाता है, जहाँ 0.0 <= x < 1.0 है।:io_lib.format/2, जो C-शैली की स्ट्रिंग फॉर्मेटिंग देता है (कंट्रोल सीक्वेंस इस्तेमाल करके)। इस फंक्शन की मदद से हम, उदाहरण के लिए, किसी पूर्णांक को 2 से 36 के बीच किसी भी बेस में छाप सकते हैं या किसी दशमलव संख्या को मनचाही सटीकता के साथ फॉर्मेट कर सकते हैं। ध्यान दीजिए कि यह फंक्शन, कई Erlang फंक्शन की तरह, एक चारलिस्ट लौटाता है।math मॉड्यूल, जो sin/1, cos/1, log2/1, log10/1, pow/2 जैसे गणितीय फंक्शन और भी बहुत कुछ देता है।Erlang की स्टैंडर्ड लाइब्रेरी को जानने के लिए STDLIB Reference Manual देखिए।
मैरी को Star Trek: The Next Generation टीवी सीरीज़ बहुत पसंद है। वह अक्सर कागज़-कलम वाले रोल प्लेइंग गेम खेलती है, जिनमें वह और उसके दोस्त खुद को Starship Enterprise का क्रू मानकर खेलते हैं। मैरी का किरदार Captain Picard है, यानी उसे कैप्टन का लॉग रखना पड़ता है। गेम का रचनात्मक हिस्सा उसे बहुत पसंद है, लेकिन वह मौके पर ही रैंडम डेटा बनाना पसंद नहीं करती।
कैप्टन के लॉग में आम तौर पर दिखने वाले डेटा के लिए रैंडम जनरेटर बनाकर मैरी की मदद कीजिए।
Starship Enterprise को अपनी यात्राओं में कई ग्रह मिलते हैं। Star Trek की दुनिया में ग्रहों को उनके गुणों के आधार पर श्रेणियों में बाँटा गया है। जैसे पृथ्वी एक क्लास M ग्रह है। ग्रहों की सभी संभव क्लासें ये हैं: D, H, J, K, L, M, N, R, T और Y.
random_planet_class/0 फंक्शन बनाइए। इसे रैंडम रूप से इन क्लासों में से कोई एक क्लास लौटानी चाहिए।
CaptainsLog.random_planet_class()
# => "K"
Enterprise (रजिस्ट्री नंबर NCC-1701) ही अंतरिक्ष में उड़ने वाला इकलौता स्टारशिप नहीं है! जब उसकी मुलाकात किसी दूसरे स्टारशिप से होती है, तो मैरी को उस स्टारशिप का रजिस्ट्री नंबर लॉग करना पड़ता है।
रजिस्ट्री नंबर "NCC-" उपसर्ग से शुरू होते हैं और उसके बाद 1000 से 9999 तक (दोनों शामिल) कोई संख्या आती है।
random_ship_registry_number/0 फंक्शन बनाइए, जो एक रैंडम स्टारशिप रजिस्ट्री नंबर लौटाता है।
CaptainsLog.random_ship_registry_number()
# => "NCC-1947"
अगर लॉग में तारीखें न हों, तो उसका क्या फायदा?
स्टारडेट एक फ्लोटिंग पॉइंट संख्या होती है। The Next Generation के पहले सीज़न में Starship Enterprise के कारनामे स्टारडेट 41000.0 और 42000.0 के बीच होते हैं। "4" 24वीं सदी को दर्शाता है और "1" पहले सीज़न को।
फंक्शन random_stardate/0 बनाइए, जो 41000.0 (शामिल) और 42000.0 (शामिल नहीं) के बीच एक फ्लोटिंग पॉइंट संख्या लौटाता है।
इसे लागू करने के लिए Erlang फंक्शन का इस्तेमाल करना चाहिए।
CaptainsLog.random_stardate()
# => 41458.15721310934
कैप्टन के लॉग में स्टारडेट को आम तौर पर एक दशमलव स्थान तक राउंड किया जाता है।
format_stardate/1 फंक्शन बनाइए, जो एक फ्लोटिंग पॉइंट संख्या लेगा और उस संख्या को एक दशमलव स्थान तक राउंड करके एक स्ट्रिंग लौटाएगा।
इसे लागू करने के लिए Erlang फंक्शन का इस्तेमाल करना चाहिए।
CaptainsLog.format_stardate(41458.15721310934)
# => "41458.2"
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।