कोटलिन कंस्ट्रक्टर्स एंड इनिशियलाइज़र (उदाहरणों के साथ)

इस लेख में, आप कोटलिन (प्राथमिक और माध्यमिक दोनों प्रकार के निर्माणकर्ताओं) के साथ-साथ इनिशलाइज़र ब्लॉक के बारे में उदाहरणों की मदद से सीखेंगे।

एक कंस्ट्रक्टर वर्ग गुणों को इनिशियलाइज़ करने का एक संक्षिप्त तरीका है।

यह एक विशेष सदस्य फ़ंक्शन है जिसे तब कहा जाता है जब कोई ऑब्जेक्ट तुरंत (निर्मित) होता है। हालांकि, वे कोटलिन में कैसे काम करते हैं, यह थोड़ा अलग है।

कोटलिन में, दो निर्माता हैं:

  • प्राथमिक निर्माता - एक वर्ग को इनिशियलाइज़ करने का संक्षिप्त तरीका
  • द्वितीयक कंस्ट्रक्टर - आपको अतिरिक्त आरंभीकरण तर्क रखने की अनुमति देता है

प्राथमिक कंस्ट्रक्टर

प्राथमिक निर्माता क्लास हेडर का हिस्सा है। यहाँ एक उदाहरण है:

 क्लास पर्सन (वैल फर्स्टनाम: स्ट्रिंग, वर एज: इंट) (// क्लास बॉडी)

कोष्ठकों से घिरे कोड का ब्लॉक प्राथमिक निर्माता है (val firstName: String, var age: Int):।

कंस्ट्रक्टर ने दो गुणों की घोषणा की: firstName(रीड-ओनली प्रॉपर्टी जैसा कि इसे कीवर्ड का उपयोग करके घोषित किया गया है val) और age(रीड-राइट प्रॉपर्टी जैसा कि यह कीवर्ड के साथ घोषित किया गया है var)।

उदाहरण: प्राथमिक कंस्ट्रक्टर

 fun main(args: Array) ( val person1 = Person("Joe", 25) println("First Name = $(person1.firstName)") println("Age = $(person1.age)") ) class Person(val firstName: String, var age: Int) ( )

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

 पहला नाम = जो उम्र = 25

जब Personक्लास की वस्तु बनाई जाती है, "Joe"और 25मानों को पारित किया जाता है जैसे Personकि एक फ़ंक्शन है।

यह व्यक्ति और क्रमशः क्रमशः 1 व्यक्ति के गुणों firstNameऔर ageगुणों को दर्शाता है।"Joe"25

प्राथमिक निर्माणकर्ताओं का उपयोग करने के अन्य तरीके हैं।

प्राथमिक कंस्ट्रक्टर और इनिशियलाइज़र ब्लॉक

प्राथमिक कंस्ट्रक्टर में एक विवश वाक्य रचना है, और इसमें कोई कोड नहीं हो सकता है।

Initization code (केवल प्रॉपर्टीज़ को इनिशियलाइज़ करने के लिए कोड नहीं) डालने के लिए, initializer ब्लॉक का उपयोग किया जाता है। यह initकीवर्ड के साथ उपसर्ग है । आइए, उपरोक्त उदाहरण को इनिशलाइज़र ब्लॉक के साथ संशोधित करते हैं:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName: String var age: Int // initializer block init ( firstName = fName.capitalize() age = personAge println("First Name = $firstName") println("Age = $age") ) )

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

 First Name = Joe Age = 25

यहाँ, पैरामीटर fName और personAge कोष्ठक के अंदर मान मान लेते हैं "Joe"और 25क्रमशः person1 ऑब्जेक्ट बनाया जाता है। हालाँकि, fName और personAge का उपयोग किए बिना किया जाता है , varया वर्ग के valगुण नहीं हैं Person

Personवर्ग में दो गुण होते हैं पहला नाम, और आयु घोषित की जाती है।

जब person1ऑब्जेक्ट बनाया जाता है, तो इनिलाइज़र ब्लॉक के अंदर कोड निष्पादित किया जाता है। इनिशियलाइज़र ब्लॉक न केवल इसके गुणों को इनिशियलाइज़ करता है बल्कि उन्हें प्रिंट भी करता है।

यहाँ एक ही कार्य करने का एक और तरीका है:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName = fName.capitalize() var age = personAge // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

कंस्ट्रक्टर पैरामीटर और संपत्ति को अलग करने के लिए, विभिन्न नामों का उपयोग किया जाता है (fName और firstName, और personAge और उम्र)। कंस्ट्रक्टर मापदंडों के लिए पूरी तरह से अलग नाम के बजाय _firstName और _age का उपयोग करना अधिक सामान्य है। उदाहरण के लिए:

 क्लास पर्सन (_firstName: स्ट्रिंग, _age: इंट) (वैल फर्स्टनेम = _firstName.capitalize () var age = _age // initializer block init (…)) 

प्राथमिक कंस्ट्रक्टर में डिफ़ॉल्ट मान

आप कंस्ट्रक्टर पैरामीटर को डिफ़ॉल्ट मान प्रदान कर सकते हैं (कार्यों के लिए डिफ़ॉल्ट तर्क प्रदान करने के समान)। उदाहरण के लिए:

 fun main(args: Array) ( println("person1 is instantiated") val person1 = Person("joe", 25) println("person2 is instantiated") val person2 = Person("Jack") println("person3 is instantiated") val person3 = Person() ) class Person(_firstName: String = "UNKNOWN", _age: Int = 0) ( val firstName = _firstName.capitalize() var age = _age // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

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

 First Name = Joe Age = 25 person2 is instantiated First Name = Jack Age = 0 person3 is instantiated First Name = UNKNOWN Age = 0

Kotlin Secondary Constructor

In Kotlin, a class can also contain one or more secondary constructors. They are created using constructor keyword.

Secondary constructors are not that common in Kotlin. The most common use of secondary constructor comes up when you need to extend a class that provides multiple constructors that initialize the class in different ways. Be sure to check Kotlin Inheritance before you learn it.

Here's how you can create a secondary constructor in Kotlin:

 class Log ( constructor(data: String) ( // some code ) constructor(data: String, numberOfData: Int) ( // some code ) )

Here, the Log class has two secondary constructors, but no primary constructor.

You can extend the class as:

 class Log ( constructor(data: String) ( // code ) constructor(data: String, numberOfData: Int) ( // code ) ) class AuthLog: Log ( constructor(data: String): super(data) ( // code ) constructor(data: String, numberOfData: Int): super(data, numberOfData) ( // code ) )

Here, constructors of the derived class AuthLog calls the corresponding constructor of the base class Log. For that, super() is used.

In Kotlin, you can also call a constructor from another constructor of the same class (like in Java) using this().

 class AuthLog: Log ( constructor(data: String): this(data, 10) ( // code ) constructor(data: String, numberOfData: Int): super(data, numberOfData) ( // code ) ) 

Example: Kotlin Secondary Constructor

 fun main(args: Array) ( val p1 = AuthLog("Bad Password") ) open class Log ( var data: String = "" var numberOfData = 0 constructor(_data: String) ( ) constructor(_data: String, _numberOfData: Int) ( data = _data numberOfData = _numberOfData println("$data: $numberOfData times") ) ) class AuthLog: Log ( constructor(_data: String): this("From AuthLog -> " + _data, 10) ( ) constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) ( ) )

When you run the program, the output will be:

 AuthLog से -> खराब पासवर्ड: 10 बार

नोट: द्वितीयक कंस्ट्रक्टर को बेस क्लास या प्रतिनिधि को किसी अन्य कंस्ट्रक्टर (जैसे ऊपर के उदाहरण में) को इनिशियलाइज़ करना होगा, यदि क्लास में कोई प्राइमरी नहीं है।

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