मॉ

मॉड्यूल में Crystal

1 अभ्यास

मॉड्यूल के बारे में

Crystal में मॉड्यूल के दो उद्देश्य हैं:

पहला उद्देश्य है नामों के टकराव से बचने के लिए एक नेमस्पेस बनाना। लेकिन यह कोड को समूहों में भी बाँटता है, जिससे यह समझना आसान हो जाता है कि कोड किस काम का है।

दूसरा उद्देश्य है टाइप के साथ कोड साझा करने के लिए मिक्सिन परिभाषित करना।

मॉड्यूल क्लास जैसे होते हैं, लेकिन मुख्य अंतर यह है कि इनका इंस्टेंस नहीं बनाया जा सकता, और इसलिए इनमें इंस्टेंस वेरिएबल नहीं होते।

मॉड्यूल घोषित करने के लिए module कीवर्ड लिखा जाता है, जिसके बाद मॉड्यूल का नाम आता है।

module Foo
end

नेमस्पेस

नेमस्पेस कोड को समूहों में बाँटने का एक तरीका है। इससे नामों का टकराव टलता है और यह समझना आसान हो जाता है कि कोड किस काम का है। जब किसी नेमस्पेस के अंदर रखे गए कॉन्स्टेंट या क्लास को एक्सेस करना हो, तो :: ऑपरेटर का उपयोग किया जाता है।

module Foo
  class Bar
  end
end

Foo::Bar.new

इसे मिक्सिन के रूप में इस्तेमाल कीजिए

यह तब काम आता है जब, उदाहरण के लिए, कई क्लासों को एक ही "बेस" फंक्शनलिटी चाहिए हो, या जब असंबंधित क्लासों के बीच कोड साझा करना हो। या जब ऐसी क्लासों के बीच कोड साझा करना हो जिनका आपस में कोई संबंध नहीं है।

किसी मॉड्यूल को मिक्सिन के रूप में इस्तेमाल करने के दो तरीके हैं: पहला है include कीवर्ड का उपयोग करना, और दूसरा है extend कीवर्ड का उपयोग करना।

दोनों तरीके उस टाइप के लिए कॉन्स्टेंट उपलब्ध करा देते हैं जो मॉड्यूल को include या extend करता है।

Include

Include करने पर मॉड्यूल के सारे मेथड उस टाइप पर इंस्टेंस मेथड के रूप में उपलब्ध हो जाते हैं। include कीवर्ड टाइप के सबसे ऊपर लिखा जाना चाहिए, और उसके बाद मॉड्यूल का नाम।

module Foo
  def foo
    "foo"
  end
end

class Bar
  include Foo
end

Bar.new.foo # => "foo"

Extend

extend भी include की तरह ही काम करता है, लेकिन मेथड को इंस्टेंस मेथड के रूप में उपलब्ध कराने के बजाय यह उन्हें क्लास मेथड के रूप में उपलब्ध कराता है। extend कीवर्ड टाइप के सबसे ऊपर लिखा जाना चाहिए, और उसके बाद मॉड्यूल का नाम।

module Foo
  def foo
    "foo"
  end
end

class Bar
  extend Foo
end

Bar.foo # => "foo"

Extend self

Crystal में एक आम पैटर्न यह है कि मॉड्यूल के अंदर extend self पैटर्न का उपयोग किया जाए। इससे मॉड्यूल के सारे मेथड मॉड्यूल पर ही क्लास मेथड के रूप में उपलब्ध हो जाते हैं। इसका मतलब है कि आपको def self.method_name सिंटैक्स का उपयोग करके हर मेथड को मॉड्यूल में असाइन नहीं करना पड़ता।

module Foo
  extend self

  def foo
    "foo"
  end
end

Foo.foo # => "foo"
GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

मॉड्यूल सीखिए

अभ्यास लॉक है

मॉड्यूल पर अभ्यास करने के लिए 2 और अभ्यास अनलॉक कीजिए