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

रूबी में स्वयं क्या है और इसका उपयोग कैसे करें (स्पष्ट रूप से समझाया गया)

यदि आप रूबी सीख रहे हैं तो आपको "स्वयं" कीवर्ड का उपयोग बहुत भ्रमित करने वाला लग सकता है।

यह कैसे काम करता है?

self क्या है? , बिल्कुल?

यह एक रूबी कीवर्ड है जो आपको वर्तमान वस्तु तक पहुंच प्रदान करता है।

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

यदि आप नहीं जानते कि वस्तुएँ क्या हैं, तो मेरे द्वारा आपके लिए बनाया गया यह वीडियो देखें। यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से संबंधित है।

यह "वर्तमान वस्तु" संदर्भ पर निर्भर करती है।

संदर्भ?

हां, संदर्भ वह है जहां आपका कोड किसी भी समय होता है।

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

यदि आपका कोड इंस्टेंस विधि के अंदर है, self एक उदाहरण है उस वर्ग का। दूसरे शब्दों में, self एक वस्तु है।

आप इसे स्वयं क्रिया में देख सकते हैं।

यह कोड चलाएँ :

डिफ कॉफी पुट सेल्फएंडकॉफी# मुख्य

यह कोड coffee . को परिभाषित और कॉल करता है विधि जो self . के मान को प्रिंट करती है ।

यह mainक्यों प्रिंट करता है ?

क्योंकि यह शीर्ष-स्तरीय ऑब्जेक्ट का नाम है, यह एक ऐसा ऑब्जेक्ट है जहां आपको बाहर परिभाषित सभी विधियां मिलेंगी। एक वर्ग।

हमारे coffee की तरह विधि यहाँ।

लेकिन अगर आप Cat . नामक वर्ग के अंदर एक विधि परिभाषित करते हैं , फिर self एक Catहोगा वस्तु।

जैसा कि यहां देखा गया है :

क्लास कैट डेफ म्याऊ पुट सेल्फ एंडेंडकैट.न्यू.मियो# <कैट:0x7a14c5>

इन उदाहरणों से हम बता सकते हैं कि self . का मान आप इसका उपयोग कहां करते हैं इसके आधार पर परिवर्तन।

अब :

मेरा मानना ​​है कि आप किसी भी चीज़ के उद्देश्य को समझकर उसे बेहतर तरीके से समझ सकते हैं।

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

आइए कुछ उदाहरण देखें।

असंबद्धता के लिए स्वयं का उपयोग करना

self . के लिए एक व्यावहारिक उपयोग एक विधि और एक स्थानीय चर के बीच अंतर बताने में सक्षम होना है।

एक चर और एक विधि को समान नाम देना एक अच्छा विचार नहीं है। लेकिन अगर आपको उस स्थिति के साथ काम करना है, तो आप self.method_name से मेथड को कॉल कर पाएंगे। ।

यहां मेरा मतलब है :

कक्षा उदाहरण def do_something केला ="वेरिएबल" केला डालता है सेल्फ।> 

यहाँ हमारे पास एक banana है स्थानीय चर, do_something . के अंदर विधि, लेकिन हमारे पास एक banana भी है विधि।

एक स्थानीय चर को प्राथमिकता दी जाती है।

इसलिए हमें self . का उपयोग करने की आवश्यकता है यहाँ अगर हम कॉल करना चाहते हैं banana विधि, मुद्रण . के बजाय banana . का मान चर।

अगला :

आइए एक अधिक सामान्य उपयोग के मामले को देखें… वर्ग विधियों को परिभाषित करना!

कक्षा-स्तरीय विधियों को परिभाषित करने के लिए स्वयं का उपयोग करना

self . के लिए नंबर एक उपयोग , निःसंदेह, वर्ग-स्तरीय विधियों को परिभाषित करना है।

मुझे यकीन है कि आपने उन्हें देखा है।

ये def self.method_name विधि परिभाषाएं

इसे पसंद करें :

कक्षा सलाद def self.buy_olive_oil # ... endendसलाद.buy_olive_oil

यह self यहाँ Salad के बराबर है , कक्षा का नाम।

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

क्योंकि हमें प्रत्येक विधि परिभाषा के लिए वर्ग के नाम का उपयोग करने की आवश्यकता नहीं है, यदि हम कक्षा बदलते हैं तो हमारे कोड को बदलना आसान हो जाता है।

यह कोड को कम शोर और पढ़ने में बेहतर बनाता है।

इसलिए हम def self.buy_olive_oil do करते हैं के बजाय def Salad.buy_olive_oil

स्वयं के लिए अन्य उपयोग

हाँ!

self . के लिए और भी अधिक उपयोग हैं , इसलिए इससे परिचित होना एक उपयोगी बात है।

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

आप वर्तमान वस्तु की तुलना किसी अन्य वस्तु से करने के लिए एक विधि में इसका उपयोग कर सकते हैं।

ऐसा कुछ :

def ==(other) self ==otherend

आप self का भी उपयोग कर सकते हैं डिबगिंग उद्देश्यों के लिए, यह पता लगाने के लिए कि आप किस ऑब्जेक्ट के साथ काम कर रहे हैं।

इसे पसंद करें :

p स्वयं

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

उदाहरण :

क्लास सलाद डीफ़ इनिशियलाइज़ @इंग्रेडिएंट्स =[] एंड डीफ़ एड_नट्स @इंग्रेडिएंट्स <<:nuts self endendmy_salad =Salad.new.add_nuts

संक्षेप में, यहां स्वयं के लिए उपयोगी उपयोगों की सूची दी गई है :

  • कक्षा-स्तरीय विधियों को परिभाषित करें
  • जब आपके पास एक ही नाम का स्थानीय चर हो, तो इंस्टेंस विधि का उपयोग करें
  • रिटर्निंग सेल्फ (बिल्डर पैटर्न)
  • डीबगिंग
  • वस्तुओं की तुलना करना (==)
  • विधि कॉल का डिफ़ॉल्ट रिसीवर

स्वयं बनाम स्वयं

इस विषय को समाप्त करने से पहले हमें एक और बात पर ध्यान देना चाहिए।

Kernel#itself विधि।

यह एक ऐसा तरीका है जिसे आप किसी ऑब्जेक्ट पर कॉल कर सकते हैं और ऑब्जेक्ट अपने आप वापस आ जाएगा।

उदाहरण :

[1,2,3,nil].select(&:self)# [1, 2 ,3]

यह उदाहरण nil को फ़िल्टर करता है &false मान।

अंतर को समझना :

  • self एक कीवर्ड है। इसका मान कहां पर निर्भर करता है आप इसका इस्तेमाल करते हैं
  • self एक विधि है। इसका मूल्य क्या पर निर्भर करता है जिस वस्तु पर आप उसका उपयोग करते हैं (1.itself . में , 1 वस्तु है)

आशा है कि यह सहायक होगा।

निष्कर्ष

आपने रूबी सेल्फ कीवर्ड के बारे में जान लिया है कि यह वास्तव में क्या है, यह क्यों उपयोगी है और इसका उपयोग कैसे करना है।

अब इसे आजमाने की आपकी बारी है।

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


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

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

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