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

Zeitwerk मास्टर करना: Ruby मॉड्यूल ऑटोलोडिंग के लिए विशेषज्ञ गाइड

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

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

हम कई सोर्स कोड फाइलों को एक में कैसे लाते हैं?

हम उन्हें require करते हैं।

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

कम से कम तुरंत नहीं...

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

यहीं ऑटोलोडिंग काम आती है!

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

Ruby में एक बिल्ट-इन ऑटोलोडिंग सुविधा है।

यह कॉन्स्टेंट्स पर आधारित है।

जब पहली बार Coconut जैसा कॉन्स्टेंट मिलता है, तो Ruby उससे जुड़ी फाइल को लोड करने का प्रयास करेगा।

लेकिन पहले:

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

इस तरह:

 autoload :Coconut, "lib/coconut.rb" 

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

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

कल्पना करें कि यदि आपको मैन्युअली कॉन्स्टेंट्स रजिस्टर नहीं करने पड़ते और Ruby को ठीक-ठीक पता होता कि सब कुछ कहां ढूंढना है।

खैर...

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

Rails 6 से पहले Rails में ऑटोलोडिंग

मैं पूरी तरह से नहीं समझता कि यह कैसे काम करता है, लेकिन Rails autoload के बजाय const_missing का उपयोग करता है ताकि आपके प्रोजेक्ट में फाइलों को ऑटोमैटिकली ढूंढ और लोड कर सके।

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

क्योंकि इसका मतलब है कि आपको अपने Rails प्रोजेक्ट्स में require का उपयोग नहीं करना पड़ता।

कन्वेंशन ओवर कॉन्फिगरेशन...

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

नियम हैं:

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

फिर...

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

बहुत उपयोगी।

Rails 6 के बाद Rails में ऑटोलोडिंग

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

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

यह "क्लासिक" Rails ऑटोलोडिंग से कैसे अलग है?

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

Zeitwerk Ruby के autoload का उपयोग करता है।

यह नया कार्यान्वयन समान फाइल-नामकरण कन्वेंशन का पालन करता है।

वास्तव में:

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

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

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

क्यों?

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

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

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

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

सारांश

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

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

अब आपकी बारी है, अपना एडिटर खोलें और कुछ मज़ा करें।

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


  1. Ruby on Rails में महारत: इस सिद्ध फ्रेमवर्क के साथ शक्तिशाली वेब ऐप्स तेजी से बनाएं Ruby on Rails में महारत: इस सिद्ध फ्रेमवर्क के साथ शक्तिशाली वेब ऐप्स तेजी से बनाएं

    Ruby on Rails (कभी-कभी RoR) सबसे लोकप्रिय ओपन-सोर्स वेब एप्लिकेशन फ्रेमवर्क है। यह Ruby प्रोग्रामिंग भाषा के साथ बनाया गया है। आप सिंपल से लेकर कॉम्प्लेक्स तक एप्लिकेशन बनाने में मदद के लिए Rails का उपयोग कर सकते हैं, Rails के साथ आप जो हासिल कर सकते हैं उसकी कोई सीमा नहीं है! फ्रेमवर्क क्या है? फ्र

  1. - Ruby और Rails में मेथड डेलीगेशन में महारत: एक व्यावहारिक गाइड

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

  1. Rack को समझना: Ruby वेब फ्रेमवर्क्स की रीढ़ Rack को समझना: Ruby वेब फ्रेमवर्क्स की रीढ़

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