Elixir एक डायनामिक टाइपिंग वाली भाषा है, यानी किसी वेरिएबल का टाइप केवल रनटाइम पर जाँचा जाता है। मैच = ऑपरेटर की मदद से हम किसी भी टाइप की वैल्यू को एक वेरिएबल के नाम से बाँध सकते हैं:
# Bound an integer value of 1
count = 1
# You may re-bind variables
count = 2
# You may re-bind any type to a variable
count = false
# Strings can be created by enclosing characters within double quotes
message = "Success!"
Elixir एक फंक्शनल प्रोग्रामिंग भाषा है और इसमें सभी नेम्ड फंक्शन को किसी मॉड्यूल के अंदर बनाना ज़रूरी होता है। मॉड्यूल बनाने के लिए defmodule कीवर्ड का उपयोग किया जाता है। रनटाइम पर सभी मॉड्यूल हर दूसरे मॉड्यूल के लिए उपलब्ध रहते हैं और प्रोग्राम के बाकी हिस्सों तक उन्हें दिखाने के लिए किसी एक्सेस मॉडिफायर की ज़रूरत नहीं पड़ती। एक मॉड्यूल दूसरी प्रोग्रामिंग भाषाओं की क्लास जैसा होता है।
defmodule Calculator do
# ...
end
नेम्ड फंक्शन को किसी मॉड्यूल के अंदर ही बनाना होता है। पब्लिक नेम्ड फंक्शन बनाने के लिए def कीवर्ड का उपयोग किया जाता है।
हर फंक्शन में शून्य या उससे अधिक आर्गुमेंट हो सकते हैं। फंक्शन के अंदर अंतिम एक्सप्रेशन की वैल्यू हमेशा अपने आप लौटा दी जाती है।
defmodule Calculator do
def add(x, y) do
x + y
end
end
किसी फंक्शन को कॉल करने के लिए उसका मॉड्यूल, फंक्शन का नाम, और फंक्शन के हर आर्गुमेंट के लिए एक वैल्यू लिखनी होती है।
sum = Calculator.add(1, 2)
# => 3
प्राइवेट फंक्शन बनाने के लिए def की जगह defp कीवर्ड का उपयोग किया जा सकता है। प्राइवेट फंक्शन का उपयोग केवल उसी मॉड्यूल के अंदर से किया जा सकता है जिसने उन्हें बनाया हो।
जब किसी फंक्शन को उसी मॉड्यूल के अंदर कॉल किया जाता है जिसमें वह बना है, तो मॉड्यूल का नाम छोड़ा जा सकता है।
आप छोटे फंक्शन एक लाइन वाले सिंटैक्स में भी लिख सकते हैं (ध्यान दीजिए कि कीवर्ड do के दोनों ओर कॉमा , और कोलन : हैं)।
defmodule Calculator do
def subtract(x, y) do
private_subtract(x, y)
end
defp private_subtract(x, y), do: x - y
end
difference = Calculator.subtract(7, 2)
# => 5
difference = Calculator.private_subtract(7, 2)
# => ** (UndefinedFunctionError) function Calculator.private_subtract/2 is undefined or private
# Calculator.private_subtract(7, 2)
फंक्शन को उनकी आरिटी के साथ बताना आम बात है। किसी फंक्शन की आरिटी उन आर्गुमेंट की संख्या होती है जो वह लेता है।
# add/3 because this function has three arguments, thus an arity of 3
def add(x, y, z) do
x + y + z
end
मॉड्यूल के नाम में PascalCase इस्तेमाल करना चाहिए। मॉड्यूल के नाम की शुरुआत बड़े अक्षर A-Z से होनी चाहिए और उसमें अक्षर a-zA-Z, संख्याएँ 0-9, और अंडरस्कोर _ हो सकते हैं।
वेरिएबल और फंक्शन के नाम में snake_case इस्तेमाल करना चाहिए। वेरिएबल या फंक्शन के नाम की शुरुआत छोटे अक्षर a-z या अंडरस्कोर _ से होनी चाहिए, उसमें अक्षर a-zA-Z, संख्याएँ 0-9, और अंडरस्कोर _ हो सकते हैं, और अंत में प्रश्नवाचक चिह्न ? या विस्मयादिबोधक चिह्न ! हो सकता है।
Elixir की स्टैंडर्ड लाइब्रेरी बहुत विशाल और अच्छी तरह डॉक्युमेंटेड है। इसका डॉक्युमेंटेशन hexdocs.pm/elixir पर ऑनलाइन उपलब्ध है। इस लिंक को कहीं सहेज लीजिए। आप इसका बहुत इस्तेमाल करेंगे!
ज़्यादातर बिल्ट-इन डेटा टाइप के लिए एक संबंधित मॉड्यूल होता है जिसमें उस डेटा टाइप पर काम करने वाले फंक्शन होते हैं, जैसे पूर्णांक के लिए Integer मॉड्यूल, स्ट्रिंग के लिए String मॉड्यूल, ऐरे के लिए List मॉड्यूल, इत्यादि।
एक खास मॉड्यूल Kernel मॉड्यूल है। यह वे बुनियादी क्षमताएँ देता है जिन पर बाकी पूरी स्टैंडर्ड लाइब्रेरी बनी है, जैसे अंकगणितीय ऑपरेटर, कंट्रोल-फ्लो मैक्रो, और बहुत कुछ। Kernel मॉड्यूल के फंक्शन अपने आप इंपोर्ट हो जाते हैं, इसलिए आप उन्हें Kernel. लिखे बिना इस्तेमाल कर सकते हैं।
कमेंट का उपयोग सोर्स कोड पढ़ने वाले दूसरे डेवलपर के लिए नोट छोड़ने के लिए किया जा सकता है। Elixir में एक लाइन वाले कमेंट से पहले # लगाया जाता है।
इस अभ्यास में आप कुछ कोड लिखेंगे, जिससे अपनी पसंदीदा पकाने की किताब से एक शानदार लसानिया पकाने में आपको मदद मिलेगी।
आपके सामने पाँच काम हैं, और सभी लसानिया पकाने में लगने वाले समय से जुड़े हैं।
Lasagna.expected_minutes_in_oven/0 फंक्शन बनाइए, जो कोई आर्गुमेंट नहीं लेता और लौटाता है कि लसानिया को ओवन में कितने मिनट रहना चाहिए। पकाने की किताब के अनुसार, ओवन में अपेक्षित समय 40 मिनट है:
Lasagna.expected_minutes_in_oven()
# => 40
Lasagna.remaining_minutes_in_oven/1 फंक्शन बनाइए। यह आर्गुमेंट में वे असली मिनट लेता है जितनी देर लसानिया ओवन में रह चुका है, और बताता है कि पिछले काम में निकाले गए ओवन के अपेक्षित समय के आधार पर लसानिया को ओवन में अभी और कितने मिनट रहना है।
Lasagna.remaining_minutes_in_oven(30)
# => 10
Lasagna.preparation_time_in_minutes/1 फंक्शन बनाइए। यह आर्गुमेंट में उन परतों की संख्या लेता है जो आपने लसानिया में जोड़ी हैं, और बताता है कि लसानिया तैयार करने में आपके कितने मिनट लगे, यह मानकर कि हर परत तैयार करने में आपको 2 मिनट लगते हैं।
Lasagna.preparation_time_in_minutes(2)
# => 4
Lasagna.total_time_in_minutes/2 फंक्शन बनाइए, जो दो आर्गुमेंट लेता है: पहला आर्गुमेंट उन परतों की संख्या है जो आपने लसानिया में जोड़ी हैं, और दूसरा आर्गुमेंट वे मिनट हैं जितनी देर लसानिया ओवन में रह चुका है। इस फंक्शन को बताना चाहिए कि लसानिया पकाने में आपने कुल कितने मिनट काम किया, यानी तैयारी के मिनटों और इस समय ओवन में लसानिया को लगे मिनटों का जोड़।
Lasagna.total_time_in_minutes(3, 20)
# => 26
Lasagna.alarm/0 फंक्शन बनाइए, जो कोई आर्गुमेंट नहीं लेता और एक संदेश लौटाता है, जो बताता है कि लसानिया खाने के लिए तैयार है।
Lasagna.alarm()
# => "Ding!"
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।