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

रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स

रूबी में स्ट्रक्ट क्या है?

एक स्ट्रक्ट एक बिल्ट-इन रूबी क्लास है, इसका उपयोग वैल्यू ऑब्जेक्ट्स उत्पन्न करने वाली नई क्लासेस बनाने के लिए किया जाता है। एक वैल्यू ऑब्जेक्ट संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए उपयोग किया जाता है।

यहां एक उदाहरण है:

दो निर्देशांकों (x और y) के साथ एक Point।

आप इस डेटा को कई अलग-अलग तरीकों से प्रस्तुत कर सकते हैं।

जैसे:

  • एक सरणी [10, 20]
  • एक हैश { x: 10, y: 10 }
  • एक ऑब्जेक्ट Point.new(10, 20)

यदि आपके पास एक से अधिक Point होने जा रहे हैं, तो ऑब्जेक्ट दृष्टिकोण का उपयोग करना अक्सर एक अच्छा अभ्यास है।

लेकिन...

आप इन दो मानों को एक साथ संग्रहीत करने के लिए पूरी क्लास नहीं बनाना चाहते!

Struct का उपयोग इस समस्या को हल करता है।

सामग्री

  • 1 रूबी में स्ट्रक्ट्स कैसे बनाएं
    • 1.1 वैकल्पिक तरीका
    • 1.2 बड़ा लाभ
  • 2 रूबी स्ट्रक्ट्स का उपयोग कैसे करें
  • 3 चेतावनी: स्ट्रक्ट्स ट्रिकी हो सकते हैं
    • 3.1 एक और अजीब चीज़
  • 4 रूबी 2.5 में नामित पैरामीटर
  • 5 OpenStruct का उपयोग कैसे करें
  • 6 स्ट्रक्ट बनाम OpenStruct
  • 7 वीडियो ट्यूटोरियल देखें
  • 8 निष्कर्ष
    • 8.1 संबंधित

चलिए करते हैं!

रूबी में स्ट्रक्ट्स कैसे बनाएं

आप new को कॉल करके और प्रतीकों की एक सूची पास करके एक Struct बना सकते हैं जो इस क्लास के इंस्टेंस वेरिएबल्स बन जाएंगे।

उनके पास डिफ़ॉल्ट रूप से एक्सेसर मेथड्स परिभाषित होंगे, पढ़ने और लिखने दोनों के लिए।

यहां एक उदाहरण है:

 Person = Struct.new(:name, :age, :gender) 

अब आप इस तरह ऑब्जेक्ट्स बना सकते हैं:

 john = Person.new "john", 30, "M" david = Person.new "david", 25, "M" 

वैकल्पिक तरीका

आपको जंगल में स्ट्रक्ट्स बनाने का यह दूसरा तरीका मिल सकता है।

यह ऐसा दिखता है:

 class Person < Struct.new(:name, :age, :gender) end 

मैं इसकी अनुशंसा नहीं करता।

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

बड़ा लाभ

स्ट्रक्ट्स के बारे में एक अच्छी बात यह है कि आप उनकी विशेषताओं के आधार पर उनकी सीधे तुलना कर सकते हैं।

उदाहरण:

 john == john # true 

यदि यह एक नियमित रूबी ऑब्जेक्ट होता तो आपको == मेथड को स्वयं परिभाषित करना पड़ता।

इसे हम "वैल्यू ऑब्जेक्ट" कहते हैं।

रूबी स्ट्रक्ट्स का उपयोग कैसे करें

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

उदाहरण के लिए:

 puts john.age # 30 puts david.gender # "M" 

यह सहायक है क्योंकि यदि आपके पास ऑब्जेक्ट्स की एक सरणी है, तो आप max, select, sum आदि जैसे मेथड्स का उपयोग कर सकते हैं।

उदाहरण:

 [john, david].max_by(&:age) 

अच्छा!

चेतावनी: स्ट्रक्ट्स ट्रिकी हो सकते हैं

स्ट्रक्ट-जनरेटेड क्लासेस के साथ एक और चेतावनी यह है कि...

वे कंस्ट्रक्टर के लिए तर्कों की सही संख्या को लागू नहीं करेंगे!

मैं समझाता हूं।

एक उचित क्लास के साथ आपको यह त्रुटि दिखाई देगी:

 ArgumentError: wrong number of arguments (0 for 3) 

लेकिन अगर आप Struct का उपयोग कर रहे हैं तो लापता तर्क nil होंगे:

 Person.new("peter") # struct Person name="peter", age=nil, gender=nil 

Struct ऑब्जेक्ट्स के साथ काम करते समय इसे ध्यान में रखें!

एक और अजीब चीज़

इस पर एक नज़र डालें...

 Struct.new(:a).ancestors [#<Class:0x29b1040>, Struct, Enumerable, Object, Kernel, BasicObject] 

यह #<Class:0x29b1040> स्ट्रक्ट्स में जोड़ा गया एक अनाम क्लास है, Enumerable मॉड्यूल पर भी ध्यान दें, जो आपको each और map जैसे मेथड्स को कॉल करने की अनुमति देता है।

रूबी 2.5 में नामित पैरामीटर

मान लें कि आप एक फाइल से लाइनें पढ़ रहे हैं और प्रत्येक लाइन एक आइटम का प्रतिनिधित्व करती है।

उदाहरण:

 200 /login 18:00 404 /bacon 18:03 200 /books 18:04 

यदि आप एक कस्टम क्लास बनाते हैं तो आप इस डेटा के साथ अधिक आसानी से काम कर सकते हैं।

इस तरह:

 LogEntry = Struct.new(:status, :url, :time) LogEntry.new(200, '/books', '18:04') 

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

अच्छी खबर!

रूबी 2.5 ने Struct ऑब्जेक्ट्स में कीवर्ड आर्गुमेंट्स के लिए समर्थन जोड़ा।

इसका उपयोग कैसे करें:

 LogEntry = Struct.new(:status, :url, :time, keyword_init: true) LogEntry.new(status: 200, url: '/books', time: '18:04') 

अब आप अपनी फाइल को पार्स कर सकते हैं और इसे LogEntry ऑब्जेक्ट्स में बदल सकते हैं!

OpenStruct का उपयोग कैसे करें

यदि आपको केवल एक बार का ऑब्जेक्ट चाहिए, तो आपको OpenStruct का उपयोग करने पर विचार करना चाहिए।

कोड उदाहरण:

 require 'ostruct' cat = OpenStruct.new(color: 'black') puts cat.class puts cat.color 

ध्यान दें कि इस क्लास तक पहुंचने के लिए आपको ostruct को require करना होगा।

चेतावनी: OpenStruct धीमा है और आपको इसे प्रोडक्शन ऐप्स में उपयोग नहीं करना चाहिए, schneems के अनुसार इस रेडिट कमेंट पर। मुझे यह ब्लॉग पोस्ट भी मिला जिसमें इस बात का समर्थन करने वाले कुछ बेंचमार्क हैं।

स्ट्रक्ट बनाम OpenStruct

Struct और OpenStruct के बीच अंतर:

  • स्ट्रक्ट पूर्वनिर्धारित विशेषताओं, समानता मेथड (==) और Enumerable के साथ एक नई क्लास बनाता है
  • OpenStruct दिए गए विशेषताओं के साथ एक नया ऑब्जेक्ट बनाता है

एक OpenStruct एक फैंसी हैश ऑब्जेक्ट है, जबकि एक Struct एक टेम्पलेट से एक नई क्लास बनाने जैसा है।

वीडियो ट्यूटोरियल देखें

निष्कर्ष

आपने रूबी स्ट्रक्ट और OpenStruct के बारे में सीखा! जब तक आप इनमें से प्रत्येक क्लास की विशेष विशेषताओं से अवगत हैं तब तक आप ठीक रहेंगे।

रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स

अब आपकी बारी है अभ्यास करने की 🙂

  1. रूबी में Rake में महारत हासिल करें: टास्क ऑटोमेशन के लिए पूर्ण गाइड रूबी में Rake में महारत हासिल करें: टास्क ऑटोमेशन के लिए पूर्ण गाइड

    Rake रूबी में एक लोकप्रिय टास्क रनर है। टास्क क्या है? अपने डेटाबेस का बैकअप बनाना अपने टेस्ट्स चलाना आंकड़े इकट्ठा करना और रिपोर्ट करना ये छोटे टास्क हैं जो Rake के बिना आपकी प्रोजेक्ट पर अलग-अलग फाइलों में बिखरे होंगे। Rake आपके टास्क्स तक पहुंच को केंद्रीकृत करता है। Rake कुछ चीजों को आसान भी ब

  1. रूबी मैट्रिक्स को समझना: परिभाषा, अनुप्रयोग और उन्हें कैसे बनाएं रूबी मैट्रिक्स को समझना: परिभाषा, अनुप्रयोग और उन्हें कैसे बनाएं

    मैट्रिक्स एक 2D (2-डायमेंशनल) ऐरे है जिसका उपयोग स्प्रेडशीट जैसे डेटा को स्टोर और काम करने के लिए किया जा सकता है। इनका उपयोग किया जा सकता है: टेबल गेम में बोर्ड को दर्शाना (शतरंज, चेकर्स, आदि) आंकड़े और डेटा विश्लेषण प्लॉट्स और ग्राफ़ उत्पन्न करना क्योंकि यह एक शक्तिशाली डेटा संरचना है इसलिए इसका

  1. Ruby में Alias कीवर्ड का उपयोग करके मेथड एलियास बनाना Ruby में Alias कीवर्ड का उपयोग करके मेथड एलियास बनाना

    Ruby में किसी मेथड को वैकल्पिक नाम देने के दो तरीके हैं: alias (कीवर्ड) alias_method चूंकि ये दोनों थोड़े अलग तरीके से एक ही काम करते हैं, इसलिए यह विषय भ्रमित करने वाला हो सकता है। यह छवि अंतरों का सारांश है: आइए इन अंतरों को विस्तार से समझते हैं ताकि आपको ठोस समझ मिल सके! alias कीवर्ड पहला है a