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

रूबी सिम्बल्स को समझना: परिभाषा, उपयोग और मुख्य अंतर

एक सिम्बल ऐसा दिखता है:

 :testing 

कुछ लोग सिम्बल्स को वेरिएबल्स समझ लेते हैं, लेकिन उनका वेरिएबल्स से कोई लेना-देना नहीं है…

…एक सिम्बल स्ट्रिंग की तरह अधिक होता है।

तो रूबी सिम्बल्स और स्ट्रिंग्स में क्या अंतर है?

स्ट्रिंग्स का उपयोग डेटा के साथ काम करने के लिए किया जाता है।

सिम्बल्स पहचानकर्ता होते हैं।

यही मुख्य अंतर है:

सिम्बल्स केवल एक अन्य प्रकार के स्ट्रिंग नहीं हैं, उनका एक अलग उद्देश्य होता है।

सिम्बल्स का उपयोग कब करें

सिम्बल्स का सबसे आम उपयोग मेथड और इंस्टेंस वेरिएबल नामों को दर्शाने के लिए होता है।

उदाहरण:

 attr_reader :title 

attr_reader के बाद :title एक सिम्बल है जो @title इंस्टेंस वेरिएबल को दर्शाता है।

आप सिम्बल्स को हैश कुंजी के रूप में भी उपयोग कर सकते हैं।

उदाहरण:

 hash = {a: 1, b: 2, c: 3} 

लाभ क्या हैं?

सिम्बल्स बेहतर दिखते हैं, वे अपरिवर्तनीय (immutable) हैं और यदि आप स्ट्रिंग कुंजियों बनाम सिम्बल कुंजियों को बेंचमार्क करते हैं तो आप पाएंगे कि स्ट्रिंग कुंजियाँ लगभग 1.70x धीमी होती हैं।

अपरिवर्तनीय से मेरा मतलब है कि प्रत्येक सिम्बल अद्वितीय होता है, और इसे बदला नहीं जा सकता:

 :rubyguides.object_id # 437768 :rubyguides.object_id # 437768 

ये दो सिम्बल्स एक ही ऑब्जेक्ट हैं क्योंकि उनका ऑब्जेक्ट आईडी समान है।

सिम्बल्स का उपयोग मेटाप्रोग्रामिंग मेथड्स जैसे send में किया जा सकता है:

 [1,2,3].send(:first) 

संक्षेप में:

आपको सिम्बल्स का उपयोग चीजों के नाम या लेबल के रूप में करना चाहिए (जैसे मेथड्स) और स्ट्रिंग्स का उपयोग तब करना चाहिए जब आप डेटा (व्यक्तिगत वर्णों) के बारे में अधिक परवाह करते हैं।

स्ट्रिंग्स और सिम्बल्स के बीच रूपांतरण

आप आवश्यकता पड़ने पर एक सिम्बल को स्ट्रिंग में बदल सकते हैं।

आप ऐसा क्यों करना चाहेंगे?

क्योंकि सिम्बल्स के पास केवल उन मेथड्स का सबसेट होता है जो एक स्ट्रिंग के पास होते हैं।

और सिम्बल्स को बदला नहीं जा सकता, इसलिए यदि आप सिम्बल के व्यक्तिगत वर्णों के साथ काम करना चाहते हैं तो आपको एक स्ट्रिंग चाहिए।

आप इसे to_s मेथड का उपयोग करके कर सकते हैं।

उदाहरण के लिए, method_missing का उपयोग करते समय आपको लापता मेथड का नाम सिम्बल के रूप में मिलता है। आप जांचना चाह सकते हैं कि यह मेथड नाम किसी निश्चित पैटर्न से मेल खाता है (जैसे ? में समाप्त होना)।

उदाहरण:

 def method_missing(method_name, *args, &block) if method_name.to_s[-1] == "?" # कुछ करें else super end end 

आप एक स्ट्रिंग ऑब्जेक्ट को सिम्बल ऑब्जेक्ट में भी बदल सकते हैं।

ऐसा करने का मेथड है String#to_sym:

 "rubyguides".to_sym # :rubyguides 

सिम्बल्स की एक सरणी बनाना

यदि आप सिम्बल्स की एक सरणी बनाना चाहते हैं तो आप इस कोड का उपयोग कर सकते हैं:

 symbols = %i(a b c) # [:a, :b, :c] 

यह आपको कॉलन और कॉमा टाइप करने से बचाता है।

स्ट्रिंग संस्करण %w के समान:

 strings = %w(a b c) # ["a", "b", "c"] 

रूबी सिम्बल्स वीडियो

सिम्बल GC (उन्नत)

सिम्बल्स के बारे में एक और दिलचस्प तथ्य यह है कि विभिन्न प्रकार के होते हैं।

कारण यह है कि रूबी 2.2 से पहले सिम्बल्स गार्बेज कलेक्ट नहीं होते थे, जिसका अर्थ है कि जब उनकी आवश्यकता नहीं होती थी तो उन्हें नियमित रूबी ऑब्जेक्ट्स (स्ट्रिंग्स, हैशेज, सरणियाँ…) की तरह मेमोरी से साफ नहीं किया जाता था।

आप यहां एक उदाहरण देख सकते हैं:

 p Symbol.all_symbols.size # 2443 ('aa'..'aj').map(&:to_sym) GC.start p Symbol.all_symbols.size # 2453 

आप देखेंगे कि सिम्बल्स की कुल संख्या 10 से बढ़ जाती है, जैसा कि आप उम्मीद करेंगे क्योंकि हम 10 नए सिम्बल्स बना रहे हैं।

लेकिन रूबी 2.2 से ये सिम्बल्स मेमोरी से हटा दिए जाते हैं क्योंकि वे अस्थायी हैं और इस कोड में किसी और चीज द्वारा उपयोग नहीं किए जा रहे हैं।

यदि आप इस कोड को सिम्बल GC सक्षम वाले रूबी संस्करण पर आज़माते हैं तो दोनों सिम्बल गणनाएँ समान होंगी।

कुछ सिम्बल्स कभी मेमोरी से नहीं हटाए जाते, इन्हें "अमर सिम्बल्स" कहा जाता है।

आप ObjectSpace मॉड्यूल का उपयोग करके उन्हें गिन सकते हैं:

 require 'objspace' ObjectSpace.count_symbols # {:mortal_dynamic_symbol=>3, :immortal_dynamic_symbol=>5, :immortal_static_symbol=>3663, :immortal_symbol=>3668} 

ध्यान दें कि सीधे बनाए गए सिम्बल्स, जैसे :a1 स्वचालित रूप से अमर सिम्बल्स बन जाते हैं। एक नया मेथड बनाने से भी उसके साथ एक immortal_static_symbol बनेगा।

तो नश्वर सिम्बल्स कहाँ से आते हैं?

to_sym मेथड से स्ट्रिंग्स को सिम्बल्स में बदलने से।

आप इसे स्वयं ObjectSpace.count_symbols का उपयोग करके जांच सकते हैं।

और यदि आप सोच रहे हैं कि immortal_dynamic_symbol क्या है, यह एक सिम्बल है जिसे नश्वर से अमर में प्रोमोट किया गया है। यह तब हो सकता है जब आप एक नश्वर सिम्बल के नाम से एक मेथड बनाते हैं।

सारांश

इस लेख में आपने सीखा:

  • सिम्बल्स अपरिवर्तनीय (immutable) हैं
  • सिम्बल्स मानों के पॉइंटर नहीं हैं, वे स्वयं मान हैं
  • स्ट्रिंग्स डेटा के लिए हैं और सिम्बल्स पहचान के लिए
  • स्ट्रिंग्स और सिम्बल्स के बीच कैसे परिवर्तित करें
  • रूबी 2.2 में सिम्बल GC पेश किया गया था ताकि अस्थायी सिम्बल्स को साफ किया जा सके

उम्मीद है आपने कुछ नया सीखा!

कृपया इस पोस्ट को शेयर करें ताकि यह अधिक लोगों तक पहुँच सके 🙂

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

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

  1. रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है

    रूबी का प्रदर्शन संस्करण दर संस्करण बहुत सुधर रहा है… और रूबी विकास टीम रूबी को और भी तेज़ बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 प्रोजेक्ट है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज़ होगा। इस प्रोजेक्ट का हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJIT समझाया गया

  1. सिसइंटर्नल्स अनावरण: विंडोज प्रशासन के लिए शक्तिशाली उपकरण सिसइंटर्नल्स अनावरण: विंडोज प्रशासन के लिए शक्तिशाली उपकरण

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