यदि आप रूबी सीख रहे हैं तो आपको "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 कीवर्ड के बारे में सीखा, वास्तव में यह क्या है, यह क्यों उपयोगी है और इसका उपयोग कैसे करें।
अब इसे अपने रूबी कोड में आज़माने की आपकी बारी है।
पढ़ने के लिए धन्यवाद! 🙂