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

रूबी के Self कीवर्ड को समझें: इसे प्रभावी ढंग से उपयोग करने के लिए स्पष्ट मार्गदर्शिका

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

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

self वास्तव में क्या है?

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

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

यह "वर्तमान ऑब्जेक्ट" संदर्भ पर निर्भर करता है।

संदर्भ?

हां, संदर्भ वह है जहां आपका कोड किसी दिए गए क्षण में है।

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

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

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

यह कोड चलाएं:

 def coffee puts self end coffee # main 

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

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

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

हमारे coffee मेथड की तरह यहां।

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

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

 class Cat def meow puts self end end Cat.new.meow # <Cat:0x7a14c5> 

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

अब:

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

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

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

विअस्पष्टीकरण के लिए Self का उपयोग

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

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

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

 class Example def do_something banana = "variable" puts banana puts self.banana end def banana "method" end end Example.new.do_something # "variable" => puts banana # "method" => puts self.banana 

यहां हमारे पास do_something मेथड के अंदर banana लोकल वेरिएबल है, लेकिन हमारे पास banana मेथड भी है।

एक लोकल वेरिएबल प्राथमिकता लेता है।

यही कारण है कि हमें यहां self का उपयोग करने की आवश्यकता है यदि हम banana मेथड को कॉल करना चाहते हैं, बजाय banana वेरिएबल के मान को प्रिंट करने के।

अगला:

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

क्लास-लेवल मेथड्स को परिभाषित करने के लिए Self का उपयोग

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

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

ये def self.method_name मेथड परिभाषाएं।

इस तरह का एक:

 class Salad def self.buy_olive_oil # ... end end Salad.buy_olive_oil 

यहां self Salad, क्लास नाम के बराबर है।

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

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

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

यही कारण है कि हम def Salad.buy_olive_oil के बजाय def self.buy_olive_oil करते हैं।

Self के अन्य उपयोग

हाँ!

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

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

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

इस तरह कुछ:

 def ==(other) self == other end 

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

इस तरह:

 p self 

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

उदाहरण:

 class Salad def initialize @ingredients = [] end def add_nuts @ingredients << :nuts self end end my_salad = Salad.new.add_nuts 

सारांश में, यहां self के उपयोगी उपयोगों की सूची है:

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

Self बनाम Itself

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

Kernel#itself मेथड।

यह एक मेथड है जिसे आप किसी ऑब्जेक्ट पर कॉल कर सकते हैं और ऑब्जेक्ट स्वयं को लौटाएगा।

उदाहरण:

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

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

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

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

उम्मीद है कि यह उपयोगी है।

निष्कर्ष

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

अब इसे अपने रूबी कोड में आज़माने की आपकी बारी है।

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


  1. Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड

    आइए grep मेथड के बारे में बात करते हैं। यह मेथड आपके लिए क्या कर सकता है? आप enumerable ऑब्जेक्ट्स को फ़िल्टर करने के लिए Grep का उपयोग कर सकते हैं, जैसे Arrays और Ranges। "लेकिन select पहले से ही ऐसा करता है!" हाँ, लेकिन grep अलग तरीके से काम करता है और अलग परिणाम उत्पन्न करता है। आइए कुछ

  1. Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड

    Map एक Ruby मेथड है जिसका उपयोग आप Arrays, Hashes और Ranges के साथ कर सकते हैं। map का मुख्य उपयोग डेटा को ट्रांसफॉर्म करना है। उदाहरण के लिए: स्ट्रिंग्स की एक सरणी दिए जाने पर, आप हर स्ट्रिंग पर जा सकते हैं और हर कैरेक्टर को UPPERCASE बना सकते हैं। या यदि आपके पास User ऑब्जेक्ट्स की एक सूची है... आ

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

    रूबी में स्ट्रक्ट क्या है? एक स्ट्रक्ट एक बिल्ट-इन रूबी क्लास है, इसका उपयोग वैल्यू ऑब्जेक्ट्स उत्पन्न करने वाली नई क्लासेस बनाने के लिए किया जाता है। एक वैल्यू ऑब्जेक्ट संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए उपयोग किया जाता है। यहां एक उदाहरण है: दो निर्देशांकों (x और y) के साथ एक Point।