Ruby इंस्टेंस वेरिएबल्स को कैसे परिभाषित और उपयोग करें
आप क्लासेस के अंदर इंस्टेंस वेरिएबल्स को परिभाषित करते हैं।
उदाहरण:
मान लीजिए हमारे पास एक CoffeeMachine क्लास है।
एक कॉफी मशीन को पानी की आवश्यकता होती है, इसलिए आप जानना चाह सकते हैं कि कितना पानी उपलब्ध है।
हम ऐसा कर सकते हैं:
class CoffeeMachine
def initialize
@water = 100
end
end
यह @water हमारा इंस्टेंस वेरिएबल है।
हम @water को 100 असाइन करते हैं प्रारंभिक मान के रूप में।
अब:
यदि हमारे पास एक make_coffee मेथड है, तो हम टैंक में बचे पानी की मात्रा को कम कर सकते हैं।
class CoffeeMachine
def initialize
@water = 100
end
def make_coffee
@water -= 10
end
end
ध्यान दें कि आपके द्वारा बनाया गया प्रत्येक CoffeeMachine ऑब्जेक्ट (new के साथ) का @water के लिए अपना निजी मान होगा।
समझ में आता है, है ना?
क्योंकि यदि आपके पास 10 वास्तविक कॉफी मशीनें हैं, तो प्रत्येक का अपना जल स्तर होगा।
इसीलिए हम इंस्टेंस वेरिएबल्स का उपयोग करते हैं!
इंस्टेंस वेरिएबल्स को कैसे एक्सेस करें
इंस्टेंस वेरिएबल्स बहुत उपयोगी नहीं होंगे यदि आप उनका वर्तमान मान नहीं पढ़ सकते।
आप @ सिंटैक्स के साथ एक इंस्टेंस वेरिएबल मान पढ़ सकते हैं।
इस तरह:
class CoffeeMachine
def initialize
@water = 50
end
def print_water_level
puts "Water Level: #{@water}"
end
end
machine = CoffeeMachine.new
machine.print_water_level # Water Level: 50
print_water_level मेथड इसका मान प्रिंट करने के लिए @water का उपयोग करता है।
एट्रिब्यूट एक्सेसर्स का उपयोग करना
आप देख सकते हैं कि आप क्लास के बाहर से इंस्टेंस वेरिएबल्स एक्सेस नहीं कर सकते।
यह डिज़ाइन द्वारा है!
इसे हम "एनकैप्सुलेशन" कहते हैं, एक ऑब्जेक्ट का डेटा बाहरी दुनिया से सुरक्षित होता है, जैसे अन्य Ruby ऑब्जेक्ट्स।
मेरा मतलब यहाँ है:
machine = CoffeeMachine.new
machine.water # NoMethodError: undefined method `water' for #<CoffeeMachine:0x2d0a530>
machine.@water # SyntaxError: unexpected tIVAR, expecting '('
कुछ मामलों में, आप इसकी अनुमति देना चाह सकते हैं।
आप ऑब्जेक्ट के डेटा में एक विंडो खोल सकते हैं ताकि यह बाहर से उपलब्ध हो जाए।
इसे करने का एक तरीका:
class CoffeeMachine
def initialize
@water = 100
end
def water
@water
end
end
machine = CoffeeMachine.new
machine.water # 100
यहां कुछ खास नहीं है।
हम अंदर से मान वापस कर रहे हैं, जहां हमारे पास इसकी एक्सेस है।
एक अन्य विकल्प एट्रिब्यूट रीडर का उपयोग करना है।
उदाहरण:
class CoffeeMachine
attr_reader :water
def initialize
@water = 100
end
end
machine = CoffeeMachine.new
machine.water # 100
पहले जैसी ही बात।
एकमात्र अंतर यह है कि Ruby आपके लिए कड़ी मेहनत करेगा और वह water मेथड बनाएगा।
जिन चीज़ों को आपको जानना चाहिए
इंस्टेंस वेरिएबल्स के बारे में कुछ बातें याद रखें ताकि आप मुसीबत में न पड़ें।
नोट्स लें:
- एक अपरिभाषित इंस्टेंस वेरिएबल हमेशा
nilलौटाता है - इंस्टेंस वेरिएबल्स को
initializeमेथड में बनाना आवश्यक नहीं है, लेकिन इसी तरह आप उन्हें एक प्रारंभिक मान देते हैं - इंस्टेंस वेरिएबल्स तक पहुंचने के उन्नत तरीके हैं, जैसे
instance_variable_get, लेकिन आपको इनसे बचना चाहिए
बताते चलें, आप इंस्टेंस वेरिएबल्स की एक सूची प्राप्त कर सकते हैं।
इस तरह:
machine.instance_variables # [:@water]
आपको यह उपयोगी लग सकता है 🙂
एक और बात:
Rails में, इंस्टेंस वेरिएबल्स (जैसे @books), आपके कंट्रोलर और व्यूज़ के बीच डेटा साझा करने के लिए उपयोग किए जाते हैं।
लेकिन आप अभी भी उन्हें सामान्य रूप से, अपनी खुद की क्लासेस के लिए उपयोग कर सकते हैं।
सारांश
आपने Ruby इंस्टेंस वेरिएबल्स के बारे में सीखा! एक प्रकार का वेरिएबल जो @ सिंबल से शुरू होता है और क्लासेस के अंदर उन्हें डेटा स्टोर करने के लिए एक स्थान देने के लिए उपयोग किया जाता है।
अब अभ्यास करना न भूलें, कोड उदाहरणों के साथ खेलें और अपने खुद के लेकर आएं।
पढ़ने के लिए धन्यवाद।