Kotlin in Hindi : Extensions

  • Introduction to kotlin extensions in Hindi
  • Kotlin extension functions in Hindi
  • Kotlin extension properties in Hindi

Introduction to Kotlin Extensions

Kotlin आपको किसी type (class) के साथ additional functionality attach करने की ability provide करती है। ये functionalities type (class) का part नहीं होती है। इन्हे अलग से declare किया जाता है। इन functionalities को extensions के नाम से जाना जाता है।

Functions और properties को आप extensions के रूप में declare कर सकते है। Extensions के द्वारा आप किसी class की ability को extend कर पाते है। Extensions declare करने के लिए आपको class को inherit करने की आवश्यकता नहीं होती है।

Resolved Statically

Extensions के बारे में एक महत्वपूर्ण बात यह है की ये statically resolved होते है। यानी की जिस type के साथ आपने compile time पर expression define किया है उसी type के अनुसार extension execute होगा। इससे कोई फर्क नहीं पड़ता है की run time पर कौनसा type use किया गया है। 

Can be defined with a Nullable Type

Extension को nullable type के साथ भी define किया जा सकता है। ऐसे extensions को null value वाले objects के साथ भी execute किया जा सकता है

Kotlin Extension Functions

एक extension function को आप normal function की तरह ही define करते है। इनमें फर्क सिर्फ इतना होता है की extension function declare करते समय आप function के नाम से पूर्व उस class का नाम define करते है जिसके लिए extension function आप define कर रहे है।

ऐसी classes को receiver type (class) कहा जाता है। इन्हे dot (.) operator के द्वारा class से पहले prefix किया जाता है।  

fun <receiver-Type><.><function-Name>(parameters list)
{
     //extension function body

This Keyword 

यदि आप extension function में से receiver type को refer करना चाहते है तो इसके लिए आप this keyword का प्रयोग करते है। यह keyword receiver type को represent करता है।

Example of Extension Function

class myClass
{
     var num: Int = 40

     fun display()
     {
          println(num);
     }
}

fun myClass.square()
{
    println(this.num*2)
}

fun main(args: Array<String>)
{
   val obj = myClass()
   obj.display()
   obj.square()

40
80

Kotlin Extension Properties

Extension functions की ही तरह आप extension properties भी define कर सकते है। 

<var> or <val> <receiver-Type><.><property-Name><:><Type>

Can Not Initialize Extension Property

एक extension property को initialize नहीं किया जा सकता है। ऐसा इसलिए होता है क्योंकि extensions किसी type को modify नहीं करते है। Extension सिर्फ उस class के object द्वारा execute किये जा सकते है, वे उस type के member नहीं होते है। 

Explicit Getters and Setters

हालाँकि एक extension property को initialize नहीं किया जा सकता है लेकिन आप उसके लिए custom getters और setters define कर सकते है। 

<var> or <val> <receiver-Type><.><property-Name><:><Type>
<getters>
<setters>

Scope of Extensions

Generally extensions को top level elements जैसे की class, function और interface आदि की तरह top level पर define किया जाता है। एक package के अंदर define किये गए extensions को आप आसानी से उस package में कँही भी use कर सकते है। 

यदि extensions किसी दूसरे package में define है तो उन्हें use करने के लिए आपको उन्हें import करना होगा। जिस प्रकार java में अलग अलग packages को import किया जाता है उसी प्रकार यँहा पर extensions को import करते है। 

import <package-Name> <extension-Name>

//use extension in current file

Define Extensions as Members

किसी एक class का extension function आप किसी दूसरी class के member के रूप में भी define कर सकते है। मान लीजिये A और B दो classes है। आप B class के लिए extension function A class के अंदर define कर सकते है।

इस situation में A class का object dispatch receiver कहलाता है और B class का object extension receiver कहलाता है।

class A
{
      fun normalFunction()
      {
          //Function body
      }
}

class B
{
     fun anotherNormalFunction()
     {
         //Function body
     }

     fun A.extFunction(parameters-list)
     {
           extension function body
     }
}

किसी class के अंदर declare किये गए extension functions को open decare करके subclass में override भी किया जा सकता है।

Visibility of Extensions 

एक extension function या property स्वयं के receiver type के members को नहीं access कर सकता है। लेकिन यदि वह स्वयं के receiver type के अंदर ही define किया गया है तो वह receiver type के members को access करता है।

एक top level पर define किया गया extension बाकी दूसरे top level members को access कर सकता है।

Previous: Kotlin Delegated Properties
Next: Kotlin Interfaces