Kotlin in Hindi – Inline Classes

  • Introduction to kotlin inline classes in Hindi
  • kotlin inline classes members in Hindi

Introduction to Kotlin Inline Classes

कई बार जब आप बड़े organizational projects पर कार्य करते है तो उनकी requirnement सामान्य applications से अलग होती है। जैसे की हो सकता है की आपको कोई task perform करने के लिए एक type को wrapper में wrap करने की आवश्यकता हो सकती है।

जब ऐसा किया जाता है तो ज्यादातर situations में run time overhead बढ़ जाता है। क्योंकि wrapper के लिए additional heap allocation की आवश्यकता होती है।

यदि छोटी applications की या कम महत्वपूर्ण projects की बात की जाए तो समय ज़्यादा महत्व नहीं रखता है। लेकिन कुछ projects ऐसे होते है जँहा समय धन के बराबर होता है ऐसे में कम से कम समय में task perform करना बहुत आवश्यक होता है।

ऐसी ही situations को handle करने के लिए kotlin में inline classes का concept introduce किया गया है। ये ऐसी classes होती है जिन्हें wrap किये जाने पर भी runtime overhead नहीं बढ़ता है।

Declared Using Inline Modifier

Inline classes को inline modifier से prefix करके declare किया जाता है।

<inline> <class> <class-Name>(single-property-initialization)
{
    //member of inline class
}

Must Have a Single Property Initialized in Primary Constructor

जब आप एक inline class declare करते है तो primary constructor में single property को initialize किया जाना अनिवार्य होता है। 

यानी की जब inline class का instance create किया जायेगा तो primary constructor के द्वारा inline class की property के लिए एक argument pass किया जायेगा। 

inline class myInlineClass(var name: String)
{
    //property and function declaration
}

Runtime के दौरान inline class के instances primary constructor में initialize की गयी single property द्वारा ही represent किये जायेंगे।

var obj = myInlineClass(“Best Hindi Tutorials”)  

असल में एक inline class का object create नहीं होता है। यही कारण है की inline class को यदि किसी wrapper के अंदर भी डाला जाता है तो भी extra runtime overhead नहीं create होता है।

Object में property की value होती है। यानी जँहा भी object को use किया जाता है वँहा पर class का data inline हो जाता है। Normally जब object को use किया जाता है तो class members के बीच calls की प्रक्रिया चलती है। लेकिन inline classes के case में ऐसा नहीं होता है। ये लगभग inline functions जैसा ही है।

Inline Classes are Experimental

Inline classes अभी तक experimental है। यानी की इनका real production में use नहीं किया गया है। इन पर experiments किये जा रहे है और जल्दी ही इन्हें production में भी use किया जाने लगेगा। 

Kotlin Inline Class Members

एक kotlin inline class में normal properties और functions declare किये जा सकते है। लेकिन कुछ ऐसे members है जो kotlin inline classes में नहीं declare किये जा सकते है। 

Can Not Have Init Blocks 

एक inline class के अंदर आप init block नहीं define कर सकते है। क्योंकि inline class में primary constructor में एक single property को initialize करना अनिवार्य होता है।

Can Not Have Inner Classes

एक inline class में init block के अलावा आप inner class भी नहीं define कर सकते है।

Inline Class Properties Can Not Have Backing Fields

Inline class में define की गयी properties का कोई backing field kotlin compiler द्वारा automatically नहीं generate किया जाता है।

Can Not Inherit a Class

एक inline class किसी interface को implement कर सकती है। लेकिन एक inline class किसी दूसरी class को inherit नहीं कर सकती है। 

Representation of Kotlin Inline Classes

Compiler हर inline class के लिए wrapper create करता है। लेकिन ज्यादातर cases में underlying या जो real type है वही use किया जाता है।

उदाहरण के लिए int एक underlying type है और ज्यादातर इसे ही use किया जाता है। Integer को int का wrapper कहा जाता है और कई cases में इसे use करना अनिवार्य होता है।

जब inline class को किसी दूसरे type के रूप में use किया जाता है तो compiler उस class का wrapper use करता है। इस process को boxing कहा जाता है।

जब inline class स्वयं के type के रूप में use की जाती है तो wrapper को remove कर दिया जाता है और underlying type को use किया जाता है। यह process unboxing कहलाती है।

उदाहरण के लिए यदि आप एक generic function में inline class object use करते है तो boxing process perform होगी। क्योंकि inline class को दूसरे type (generic type) के रूप में use किया जा रहा है।

Previous: Kotlin Enum Classes
Next: Kotlin Generics