यह आलेख रूबी में कक्षा और मॉड्यूल ऑटोलोडिंग की व्याख्या करता है। जिसमें नया "Zeitwerk" रत्न शामिल है जो कि Rails 6 का हिस्सा है।
आइए एक प्रश्न से शुरू करते हैं...
हम एकाधिक स्रोत कोड फ़ाइलों को एक साथ कैसे लाते हैं?
हमें require
उन्हें।
फ़ाइल की आवश्यकता रूबी को इसे पढ़ती है और कोड को अंदर चलाती है। लेकिन अगर हमारे पास आवश्यक फाइलों की सूची है, तो शायद हमें उन सभी को लोड करने की आवश्यकता नहीं है ।
कम से कम अभी तो नहीं...
हम फ़ाइलों को कैसे लोड कर सकते हैं केवल जब हमें उनकी आवश्यकता हो ताकि हम अपना आवेदन तेजी से शुरू कर सकें?
यहीं से ऑटोलोडिंग आती है!
ऑटोलोडिंग का उपयोग कैसे करें
रूबी में एक अंतर्निहित ऑटोलोडिंग सुविधा है।
यह स्थिरांक पर आधारित है।
जब एक स्थिरांक जैसे Coconut
पहली बार पाया गया है, रूबी अपनी संबद्ध फ़ाइल को लोड करने का प्रयास करेगी।
लेकिन पहले :
आपको इस स्थिरांक को इसके फ़ाइल नाम के साथ पंजीकृत करने की आवश्यकता है।
इसे पसंद करें :
autoload :Coconut, "lib/coconut.rb"
अब रूबी को पता है कि जब भी आप Coconut
का उपयोग करना चाहते हैं तो कहां देखना है कक्षा या मॉड्यूल।
लेकिन आप जानते हैं कि इससे बेहतर क्या होगा?
कल्पना कीजिए कि अगर आपको मैन्युअल रूप से स्थिरांक दर्ज करने की आवश्यकता नहीं होती है और रूबी को पता होता है कि सब कुछ कहां मिलेगा।
खैर…
रेल यही करता है, लेकिन पहले रेल 6 इसने इस autoload
का उपयोग नहीं किया तंत्र।
रेल 6 से पहले रेल में स्वत:लोड हो रहा है
मैं पूरी तरह से नहीं समझता कि यह कैसे काम करता है, लेकिन रेल const_missing
. का उपयोग करता है , के बजाय autoload
अपने प्रोजेक्ट में फ़ाइलों को स्वचालित रूप से ढूंढने और लोड करने के लिए।
यह उपयोगी क्यों है?
क्योंकि इसका मतलब है कि आपको require
. का उपयोग करने की आवश्यकता नहीं है आपके रेल प्रोजेक्ट्स में।
कॉन्फ़िगरेशन पर कन्वेंशन…
यह सब अपने आप होता है, बशर्ते आप नियमों का पालन करें।
नियम हैं :
- अपनी फ़ाइल को वहीं रखें जहां वह मिल सकती है (जैसा कि
ActiveSupport::Dependencies.autoload_paths
द्वारा परिभाषित किया गया है) ) - प्रति फ़ाइल एक वर्ग / मॉड्यूल परिभाषित करें
- अंडरस्कोर (
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"
हो जाता है। एक ही कक्षा के लिए।
सबसे अच्छी बात?
यह नई कार्यक्षमता रेल से जुड़ी नहीं है, इसलिए आप इसे अपने गैर-रेल प्रोजेक्ट में उपयोग कर सकते हैं!
सारांश
आपने रूबी में मॉड्यूल ऑटोलोडिंग के बारे में सीखा है, वास्तव में यह क्या है और यह कैसे काम करता है!
इस नई समझ के साथ, आप अपने रूबी प्रोजेक्ट्स को सबसे प्रभावी तरीके से तैयार करने में सक्षम होंगे।
अब आपकी बारी है, अपना संपादक खोलो और मज़े करो।
पढ़ने के लिए धन्यवाद!