कोटलिन ऑब्जेक्ट डिक्लेरेशन और एक्सप्रेशन

इस लेख में, आप उदाहरणों की मदद से ऑब्जेक्ट घोषणाओं (एकल) और ऑब्जेक्ट एक्सप्रेशंस के बारे में जानेंगे।

वस्तु घोषणा

सिंगलटन एक ऑब्जेक्ट-ओरिएंटेड पैटर्न है जहां एक क्लास में केवल एक उदाहरण (ऑब्जेक्ट) हो सकता है।

उदाहरण के लिए, आप SQL डेटाबेस बैकएंड वाले एप्लिकेशन पर काम कर रहे हैं। आप सभी ग्राहकों के लिए एक ही कनेक्शन का पुन: उपयोग करते हुए डेटाबेस तक पहुंचने के लिए एक कनेक्शन पूल बनाना चाहते हैं। इसके लिए, आप सिंगलटन क्लास के माध्यम से कनेक्शन बना सकते हैं ताकि हर क्लाइंट को समान कनेक्शन मिल सके।

कोटलिन ऑब्जेक्ट डिक्लेरेशन फ़ीचर का उपयोग करके सिंगलेट्स बनाने का एक आसान तरीका प्रदान करता है। उसके लिए, ऑब्जेक्ट कीवर्ड का उपयोग किया जाता है।

 ऑब्जेक्ट सिंगलटनएक्सप्लिमेंट (… // क्लास का शरीर…)

उपरोक्त कोड एक क्लास डिक्लेरेशन और एक सिंगल इंस्टेंस की घोषणा करता है सिंग्लटनएक्सप्लिमेंट ऑफ द क्लास।

एक वस्तु घोषणा में गुण, विधियाँ आदि हो सकते हैं। हालांकि, उन्हें कंस्ट्रक्टर (जो समझ में आता है) की अनुमति नहीं है। क्यों?

एक सामान्य वर्ग की वस्तुओं के समान, आप .नोटेशन का उपयोग करके विधियों और एक्सेस गुणों को कॉल कर सकते हैं ।

उदाहरण: वस्तु घोषणा

 object Test ( private var a: Int = 0 var b: Int = 1 fun makeMe12(): Int ( a = 12 return a ) ) fun main(args: Array) ( val result: Int result = Test.makeMe12() println("b = $(Test.b)") println("result = $result") )

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

 b = 1 परिणाम = 12

ऑब्जेक्ट घोषणापत्र सामान्य वर्गों की तरह वर्गों और इंटरफेस से विरासत में मिल सकता है।

सिंगलटन और डिपेंडेंसी इंजेक्शन

वस्तु घोषणाएं कभी-कभी उपयोगी हो सकती हैं। हालांकि, वे बड़े सॉफ्टवेयर सिस्टम में आदर्श नहीं हैं जो सिस्टम के कई अन्य हिस्सों के साथ बातचीत करते हैं।

अनुशंसित पढ़ना: निर्भरता इंजेक्शन और सिंगलटन डिजाइन पैटर्न

कोटलिन ऑब्जेक्ट एक्सप्रेशंस

ऑब्जेक्ट कीवर्ड का उपयोग अनाम ऑब्जेक्ट के रूप में ज्ञात अनाम वर्ग की वस्तुओं को बनाने के लिए भी किया जा सकता है। यदि आप इसके लिए एक उपवर्ग घोषित किए बिना कुछ वर्ग या इंटरफ़ेस के मामूली संशोधन की एक वस्तु बनाने की आवश्यकता है, तो उनका उपयोग किया जाता है। उदाहरण के लिए ,

 window.addMouseListener (ऑब्जेक्ट: माउस एडेप्टर () (ओवरऑल फन माउस क्लोक्ड (ई: माउसइवेंट) (//…) ओवरराइड फन माउस ईनीडेड (ई: माउसइवेंट) (//…))

(उदाहरण आधिकारिक कोटलिन डॉक्स पृष्ठ से लिया गया है।)

यहाँ, एक अनाम वस्तु को विस्तार से घोषित किया गया है MouseAdapter वर्ग। कार्यक्रम दो MouseAdapterतरीकों से आगे निकलता है : mouseClicked()और mouseEntered()

यदि आवश्यक हो, तो आप अनाम वस्तु को एक नाम निर्दिष्ट कर सकते हैं और इसे एक चर में संग्रहीत कर सकते हैं। उदाहरण के लिए,

 वैल ओब्ज = ऑब्जेक्ट: माउस एडेप्टर () (ओवरऑल फन माउसक्लेड (ई: माउसइवेंट) (//…) ओवरराइड फन माउसइन्डिंग (ई: माउसइवेंट) (//…))

उदाहरण: कोटलिन ऑब्जेक्ट एक्सप्रेशन

 open class Person() ( fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person() ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() ) 

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

खाना खा रहा हूँ। लोगों से बात कर रहे हैं। मैं प्रार्थना नहीं करता। मेँ भगवान मेँ विश्वास नह।

यहां, अनाम वस्तु को चर नास्तिक में संग्रहीत किया जाता है जो pray()विधि के साथ व्यक्ति वर्ग को लागू करता है।

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

 open class Person(name: String, age: Int) ( init ( println("name: $name, age: $age") ) fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person("Jack", 29) ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() ) 

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

नाम: जैक, उम्र: 29 भोजन खाना। लोगों से बात कर रहे हैं। मैं प्रार्थना नहीं करता। मेँ भगवान मेँ विश्वास नह।

दिलचस्प लेख...