इंस्टेंस वेरिएबलो के बारे में
मुख्य बातें:
- जब किसी क्लास का
.new मेथड किसी ऑब्जेक्ट इंस्टेंस को बनाने के लिए कॉल किया जाता है, तो .initialize मेथड को वे सारे आर्गुमेंट दिए जाते हैं जो उस इंस्टेंस की शुरुआती स्थिति तय करते हैं।
- इंस्टेंस वेरिएबलों के नाम के आगे
@ लगाया जाता है।
- जब तक इंस्टेंस वेरिएबल को स्पष्ट रूप से सेट न किया जाए, तब तक उसकी वैल्यू
nil रहती है।
- इंस्टेंस वेरिएबलो डिफ़ॉल्ट रूप से प्राइवेट होते हैं, और इन्हें गेटर और सेटर के ज़रिए ही बदलना चाहिए
class Backpack
initialize(owner)
@owner = owner
end
def owner
@owner
end
def owner=(new_owner)
@owner = new_owner
end
end
- जिन मेथड के नाम के अंत में
= आता है, Ruby उन्हें सेटर मानता है, और इससे असाइनमेंट सिंटैक्स के सिंटैक्टिक "शुगर" इस्तेमाल की सुविधा मिलती है, जैसे Backpack.new("Sven").owner = "Ayah"।
ध्यान दीजिए कि owner और = के बीच एक जगह है, जबकि असल मेथड का नाम owner= है।
- गेटर और सेटर,
attr_reader, attr_writer और attr_accessor मेथड की मदद से बनाए जा सकते हैं:
-
attr_reader: दिए गए सिंबल के लिए गेटर बनाता है
-
attr_writer: दिए गए सिंबल के लिए सेटर बनाता है
-
attr_accessor: दिए गए सिंबल के लिए गेटर और सेटर दोनों बनाता है
class Backpack
attr_accessor :owner
initialize(owner)
@owner = owner
end
end
- इंस्टेंस वेरिएबल को सीधे इस्तेमाल करने के बजाय गेटर और सेटर क्यों इस्तेमाल करें?
- अगर पिछले उदाहरण में कोई टाइपिंग की गलती (जिसे हम "टाइपो" कहते हैं) हो जाए (जैसे
@ownar), तो वह चुपचाप नाकाम हो जाती और हो सकता है कि इससे सिस्टम में कोई बग आ जाए।
- गेटर और सेटर इसे स्पष्ट कर देते हैं, और टाइपो होने पर एरर देते हैं
संदर्भ
ऑब्जेक्ट इंस्टेंस को इनिशियलाइज़ करना
इंस्टेंस वेरिएबल