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

रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

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

एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है।

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

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

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

पसंद करें :

  • एक सरणी [10, 20]
  • एक हैश { x: 10, y: 10 }
  • एक वस्तु Point.new(10, 20)

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

लेकिन…

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

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

सामग्री

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

चलो यह करते हैं!

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

आप एक Struct बना सकते हैं new . पर कॉल करके &प्रतीकों की एक सूची में पास करना जो इस वर्ग के उदाहरण चर बन जाएंगे।

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

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

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 . का उपयोग कर रहे हैं लापता तर्क शून्य होंगे:

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> structs में जोड़ा गया एक अज्ञात वर्ग है, गणना करने योग्य मॉड्यूल को भी नोटिस करें, जो आपको प्रत्येक और मानचित्र जैसी विधियों को कॉल करने की अनुमति देता है।

रूबी 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 . का उपयोग करने पर विचार करना चाहिए इसके बजाय।

कोड उदाहरण :

require 'ostruct'

cat = OpenStruct.new(color: 'black')

puts cat.class
puts cat.color

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

<ब्लॉकक्वॉट>

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

स्ट्रक्चर बनाम ओपनस्ट्रक्चर

Struct . के बीच का अंतर &OpenStruct :

  • संरचना एक नई कक्षा बनाती है पूर्वनिर्धारित विशेषताओं के साथ, समानता विधि (==) और गणना योग्य
  • ओपनस्ट्रक्चर एक नई वस्तु बनाता है दी गई विशेषताओं के साथ

एक OpenStruct एक फैंसी हैश वस्तु है, जबकि एक Struct एक टेम्पलेट से एक नया वर्ग बनाने जैसा है।

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

निष्कर्ष

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

रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

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


  1. रूबी में रेक क्या है और इसका उपयोग कैसे करें

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

  1. एक मैट्रिक्स क्या है और रूबी में इसका उपयोग कैसे करें?

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

  1. रूबी उपनाम कीवर्ड का उपयोग कैसे करें

    आप रूबी पद्धति को दो तरह से वैकल्पिक नाम दे सकते हैं: उपनाम (कीवर्ड) उपनाम_विधि क्योंकि वे एक ही काम को थोड़े अलग तरीके से करते हैं, यह एक भ्रमित करने वाला विषय हो सकता है। यह छवि मतभेदों का सारांश है : आइए एक ठोस समझ पाने के लिए इन अंतरों को और अधिक विस्तार से देखें! उपनाम कीवर्ड सबसे पहले