ट्रैक
/
Crystal
Crystal
/
अभ्यास
/
Ary की शानदार लसग्ना
Ary की शानदार लसग्ना

Ary की शानदार लसग्ना

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

परिचय

शुरुआत

वेरिएबल

किसी वेरिएबल को घोषित करने के लिए = असाइनमेंट ऑपरेटर का उपयोग कीजिए। Crystal में वेरिएबलो के नाम snake_case प्रारूप में लिखे जाते हैं।

number = 1
puts number # => 1

number = 2
puts number # => 2

स्थिरांक

स्थिरांक भी उसी = असाइनमेंट ऑपरेटर से घोषित किए जाते हैं, लेकिन इनमें सभी अक्षर बड़े होते हैं, जिसे SCREAMING_SNAKE_CASE कहा जाता है।

NUMBER = 1
puts NUMBER # => 1

पहले से परिभाषित स्थिरांक को वैल्यू असाइन करने पर कंपाइल के समय एरर मिलती है।

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

टाइप

Crystal एक ऐसी भाषा है जिसे कंपाइल किया जाता है। इसका मतलब है कि हर वेरिएबल या मेथड आर्गुमेंट को कंपाइल के समय एक टाइप दिया जाता है। कंपाइलर किसी वेरिएबल या मेथड आर्गुमेंट का टाइप अनुमान लगा सकता है। हालाँकि कुछ मामलों में टाइप बताना आवश्यक होता है। जिन मामलों में टाइप देना आवश्यक होता है, उन्हें आगे के कॉन्सेप्ट में समझाया जाएगा।

मेथड

मेथड निर्देशों के एक समूह को एक साथ रखने का तरीका हैं। इस समूह को बार-बार इस्तेमाल किया जा सकता है। Crystal में मेथड अक्सर किसी क्लास, मॉड्यूल या स्ट्रक्ट के अंदर बनाए जाते हैं। लेकिन मेथड किसी क्लास, मॉड्यूल या स्ट्रक्ट के बाहर भी बनाए जा सकते हैं। मेथड को def कीवर्ड से घोषित किया जाता है, और उसके बाद मेथड का नाम लिखा जाता है। Crystal में मेथड का नाम snake_case में लिखा जाना चाहिए। जब मेथड में कोई आर्गुमेंट न हो, तो आप ब्रैकेट छोड़ सकते हैं। मेथड का अंत बताने के लिए आपको end कीवर्ड का उपयोग करना होता है।

def hello
  puts "Hello World!"
end

किसी वेरिएबल या मेथड आर्गुमेंट के टाइप के लिए ऐसा मेथड इस्तेमाल करने पर, जो मौजूद नहीं है, कंपाइल के समय एरर मिलती है।

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

आर्गुमेंट

मेथड में आर्गुमेंट हो सकते हैं। आर्गुमेंट वह डेटा है जो मेथड को दिया जाता है। मेथड को आर्गुमेंट दे पाने के लिए आपको आर्गुमेंट का नाम बताना होता है। Crystal में आर्गुमेंट snake_case में लिखे जाने चाहिए। एक मेथड में कई आर्गुमेंट हो सकते हैं, लेकिन आर्गुमेंट को कॉमा से अलग किया जाना चाहिए।

def hello(name)
  puts "Hello #{name}!"
end

मेथड में कई आर्गुमेंट भी हो सकते हैं। ऐसी स्थिति में आर्गुमेंट को कॉमा से अलग करना आवश्यक है।

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

मेथड को कॉल करना

किसी क्लास, मॉड्यूल या स्ट्रक्ट से जुड़े मेथड को कॉल करते समय आपको डॉट ऑपरेटर (.) का उपयोग करना होता है। इसे इस तरह लिखा जाता है: <ClassName>.<method_name>. जब कोई मेथड किसी क्लास, मॉड्यूल या स्ट्रक्ट से नहीं जुड़ा होता, तो आप उसका नाम लिखकर उसे सीधे कॉल कर सकते हैं। मेथड हमेशा अंतिम एक्सप्रेशन की वैल्यू अपने आप लौटाते हैं।

जब किसी मेथड में आर्गुमेंट हों, तो मेथड को कॉल करते और बनाते समय आर्गुमेंट लिखने के लिए आप ब्रैकेट का उपयोग कर सकते हैं, जैसे: <method_name>(<argument_1>, <argument_2>, ...). जब किसी मेथड में कोई आर्गुमेंट न हो, तो ब्रैकेट नहीं लिखे जाने चाहिए।

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

कई आर्गुमेंट वाले मेथड को कॉल करते समय आर्गुमेंट को कॉमा से अलग किया जाना चाहिए। आर्गुमेंट उसी क्रम में देने चाहिए जिस क्रम में मेथड में दिए गए हैं।

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

गलत संख्या में आर्गुमेंट देकर मेथड को कॉल करने पर कंपाइल के समय एरर मिलती है।

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

जोड़, घटाव और गुणा

Crystal में आप दो संख्याओं को जोड़ने के लिए + ऑपरेटर का उपयोग कर सकते हैं। आप दो संख्याओं को घटाने के लिए - ऑपरेटर का भी उपयोग कर सकते हैं। और आप दो संख्याओं को गुणा करने के लिए * ऑपरेटर का उपयोग कर सकते हैं।

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

कमेंट

Crystal में कमेंट # अक्षर से लिखे जाते हैं, उसके बाद एक स्पेस और फिर कमेंट। कमेंट कोड को समझाने के लिए लिखे जाते हैं। कंपाइलर कमेंट को चलाता नहीं है।

# This is a comment

निर्देश

इस अभ्यास में आप ऐसा कोड लिखेंगे जो आपकी पसंदीदा कुकबुक की एक शानदार लसाना पकाने में आपकी मदद करेगा।

आपके सामने चार काम हैं, और ये सब लसाना पकाने में लगने वाले समय से जुड़े हैं।

1. ओवन के अपेक्षित समय को मिनटों में परिभाषित कीजिए

Lasagna क्लास में EXPECTED_MINUTES_IN_OVEN कॉन्स्टेंट को परिभाषित कीजिए, जो यह संग्रहीत करता है कि लसाना को कितने मिनट ओवन में रहना चाहिए। कुकिंग बुक के अनुसार, ओवन का अपेक्षित समय मिनटों में 40 है:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. ओवन में बचे समय की गणना मिनटों में कीजिए

Lasagna#remaining_minutes_in_oven मेथड को परिभाषित कीजिए, जो यह पैरामीटर लेता है कि लसाना कितने मिनट से ओवन में रहा है, और पिछले काम में दिए गए ओवन के अपेक्षित समय के आधार पर यह लौटाता है कि लसाना को ओवन में अभी और कितने मिनट रहना है।

Lasagna.new.remaining_minutes_in_oven(30)
# => 10

3. तैयारी में लगने वाले समय की गणना मिनटों में कीजिए

Lasagna#preparation_time_in_minutes मेथड को परिभाषित कीजिए, जो यह पैरामीटर लेता है कि आपने लसाना में कितनी परतें जोड़ीं, और यह लौटाता है कि उसे तैयार करने में आपने कितने मिनट लगाए, यह मानते हुए कि हर परत को तैयार करने में 2 मिनट लगते हैं।

Lasagna.new.preparation_time_in_minutes(2)
# => 4

4. कुल काम करने के समय की गणना मिनटों में कीजिए

Lasagna#total_time_in_minutes मेथड को परिभाषित कीजिए, जो दो नामित पैरामीटर लेता है: number_of_layers पैरामीटर वह संख्या है कि आपने लसाना में कितनी परतें जोड़ीं, और actual_minutes_in_oven पैरामीटर वह संख्या है कि लसाना कितने मिनट से ओवन में है। मेथड को उन कुल मिनटों की संख्या लौटानी चाहिए जो आपने लसाना पकाने में लगाए, यानी तैयारी में लगे मिनटों और इस समय तक लसाना के ओवन में बिताए समय का जोड़।

number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Crystal Exercism

Ary की शानदार लसग्ना शुरू करने के लिए तैयार हैं?

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