Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में Zeitwerk और मॉड्यूल ऑटोलोडिंग (स्पष्ट रूप से समझाया गया)

यह आलेख रूबी में कक्षा और मॉड्यूल ऑटोलोडिंग की व्याख्या करता है। जिसमें नया "Zeitwerk" रत्न शामिल है जो कि Rails 6 का हिस्सा है।

आइए एक प्रश्न से शुरू करते हैं...

हम एकाधिक स्रोत कोड फ़ाइलों को एक साथ कैसे लाते हैं?

हमें require उन्हें।

फ़ाइल की आवश्यकता रूबी को इसे पढ़ती है और कोड को अंदर चलाती है। लेकिन अगर हमारे पास आवश्यक फाइलों की सूची है, तो शायद हमें उन सभी को लोड करने की आवश्यकता नहीं है

कम से कम अभी तो नहीं...

हम फ़ाइलों को कैसे लोड कर सकते हैं केवल जब हमें उनकी आवश्यकता हो ताकि हम अपना आवेदन तेजी से शुरू कर सकें?

यहीं से ऑटोलोडिंग आती है!

ऑटोलोडिंग का उपयोग कैसे करें

रूबी में एक अंतर्निहित ऑटोलोडिंग सुविधा है।

यह स्थिरांक पर आधारित है।

जब एक स्थिरांक जैसे Coconut पहली बार पाया गया है, रूबी अपनी संबद्ध फ़ाइल को लोड करने का प्रयास करेगी।

लेकिन पहले :

आपको इस स्थिरांक को इसके फ़ाइल नाम के साथ पंजीकृत करने की आवश्यकता है।

इसे पसंद करें :

autoload :Coconut, "lib/coconut.rb"

अब रूबी को पता है कि जब भी आप Coconut का उपयोग करना चाहते हैं तो कहां देखना है कक्षा या मॉड्यूल।

लेकिन आप जानते हैं कि इससे बेहतर क्या होगा?

कल्पना कीजिए कि अगर आपको मैन्युअल रूप से स्थिरांक दर्ज करने की आवश्यकता नहीं होती है और रूबी को पता होता है कि सब कुछ कहां मिलेगा।

खैर…

रेल यही करता है, लेकिन पहले रेल 6 इसने इस autoload का उपयोग नहीं किया तंत्र।

रेल 6 से पहले रेल में स्वत:लोड हो रहा है

मैं पूरी तरह से नहीं समझता कि यह कैसे काम करता है, लेकिन रेल const_missing . का उपयोग करता है , के बजाय autoload अपने प्रोजेक्ट में फ़ाइलों को स्वचालित रूप से ढूंढने और लोड करने के लिए।

यह उपयोगी क्यों है?

क्योंकि इसका मतलब है कि आपको require . का उपयोग करने की आवश्यकता नहीं है आपके रेल प्रोजेक्ट्स में।

कॉन्फ़िगरेशन पर कन्वेंशन…

यह सब अपने आप होता है, बशर्ते आप नियमों का पालन करें।

नियम हैं :

  1. अपनी फ़ाइल को वहीं रखें जहां वह मिल सकती है (जैसा कि ActiveSupport::Dependencies.autoload_paths द्वारा परिभाषित किया गया है) )
  2. प्रति फ़ाइल एक वर्ग / मॉड्यूल परिभाषित करें
  3. अंडरस्कोर (UsersController . का उपयोग करके फ़ाइल को वर्ग के नाम के बाद नाम दें => users_controller )

फिर…

जब भी आपका कोड इनमें से किसी भी वर्ग के नाम का संदर्भ देता है, तो रेल को पता चल जाएगा कि उन्हें कहां खोजना है।

बहुत मददगार।

रेल 6 के बाद रेल में स्वत:लोड हो रहा है

रेल 6 एक नया निरंतर ऑटोलोडिंग तंत्र पेश करता है।

इसे Zeitwerk कहा जाता है।

यह "क्लासिक" रेल ऑटोलोडिंग से किस प्रकार भिन्न है?

const_missing . के विपरीत पुराने रेल संस्करणों द्वारा उपयोग किया जाने वाला दृष्टिकोण, जिसमें जानकारी का अभाव है - जैसे मॉड्यूल नेस्टिंग - जिसके परिणामस्वरूप कई सीमाएँ होती हैं।

Zeitwerk रूबी के autoload . का उपयोग करता है ।

यह नया कार्यान्वयन समान फ़ाइल-नामकरण सम्मेलनों का अनुसरण करता है।

वास्तव में :

Zeitwerk वर्ग के नाम का अनुमान लगाने के लिए फ़ाइल नाम का उपयोग करता है, users_controller => UsersController

जो पहले के बिल्कुल विपरीत है।

बीटीडब्ल्यू, आप अभी भी autoload_paths . का उपयोग कर सकते हैं , लेकिन आप केवल आधार पथ जोड़ना चाहते हैं, जैसे "/lib" , के बजाय "/lib/**"

क्यों?

यह नाम स्थान और नेस्टिंग के साथ काम करने का तरीका है।

  • यदि आपके पास "lib" है ऑटोलोड में, और आप "Fruit::Orange" . को परिभाषित करना चाहते हैं , तो फ़ाइल का नाम "lib/fruit/orange.rb" . होना चाहिए ।
  • लेकिन अगर आपके पास "lib/fruit" है ऑटोलोड में, फिर आपको किसी अन्य फ़ोल्डर का उपयोग करना होगा, इसलिए आपकी फ़ाइल का नाम "lib/fruit/fruit/orange.rb" हो जाता है। एक ही कक्षा के लिए।

सबसे अच्छी बात?

यह नई कार्यक्षमता रेल से जुड़ी नहीं है, इसलिए आप इसे अपने गैर-रेल प्रोजेक्ट में उपयोग कर सकते हैं!

सारांश

आपने रूबी में मॉड्यूल ऑटोलोडिंग के बारे में सीखा है, वास्तव में यह क्या है और यह कैसे काम करता है!

इस नई समझ के साथ, आप अपने रूबी प्रोजेक्ट्स को सबसे प्रभावी तरीके से तैयार करने में सक्षम होंगे।

अब आपकी बारी है, अपना संपादक खोलो और मज़े करो।

पढ़ने के लिए धन्यवाद!


  1. रूबी ऑन रेल्स क्या है और यह क्यों उपयोगी है?

    रूबी ऑन रेल्स (कभी-कभी RoR) सबसे लोकप्रिय ओपन-सोर्स वेब एप्लिकेशन फ्रेमवर्क है। इसे रूबी प्रोग्रामिंग भाषा के साथ बनाया गया है। आप अनुप्रयोगों को बनाने में मदद करने के लिए रेल का उपयोग कर सकते हैं, सरल से जटिल तक, रेल के साथ आप क्या हासिल कर सकते हैं इसकी कोई सीमा नहीं है! ढांचा क्या है? फ़्रेम

  1. रूबी और रूबी ऑन रेल्स में मेथड्स कैसे डेलिगेट करें?

    यह लेख रूबी में विधि प्रतिनिधिमंडल के बारे में है। आप सीखेंगे कि delegate का उपयोग कैसे करें विधि, Forwardable मॉड्यूल और SimpleDelegator कक्षा। हमें प्रतिनिधिमंडल की आवश्यकता क्यों है ? ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, कक्षाओं के एक साथ काम करने के दो तरीके हैं। वे हैं : विरासत रचना वंशान

  1. रूबी डेवलपर्स के लिए रैक समझाया गया

    प्रत्येक रेल, सिनात्रा, और अन्य रूबी वेब ढांचे के पर्दे के पीछे क्या हो रहा है? इसका उत्तर है रैक, प्रमुख घटक जो इसे संभव बनाता है। लेकिन रैक वास्तव में क्या है? रैक फ्रेमवर्क (रेल) और एप्लिकेशन सर्वर (प्यूमा) के बीच की एक परत है। यह गोंद है जो उन्हें संवाद करने की अनुमति देता है। हम रैक का उ