Kotlin in Hindi – Delegated Properties

  • Introduction to kotlin delegated properties in Hindi
  • Creating kotlin delegated properties in Hindi
  • Kotlin standard delegates in Hindi

Introduction to Kotlin Delegated Properties

कई बार जब आप किसी बड़े project पर कार्य करते है तो कुछ properties ऐसी होती है जिनके getters और setters को एक ही तरीके से implement किया जाता है। ये वो properties होती है जो बहुत common होती है और regularly use की जाती है।

Implement Once and For All

Kotlin आपको एक ऐसा mechanism provide करती है जिससे आपको इन properties के लिए बार बार getters और setters implement करने की आवश्यकता नहीं होती है। आप सिर्फ एक बार getters और setters implement करते है और उसे library में store कर देते है। इसके बाद आप उस implementation को कितनी भी बार use कर सकते है। 

ऐसी properties को kotlin में delegated properties कहा जाता है।

Not Backed by a Class Field

Delegated properties kotlin द्वारा automatically provide किये जाने वाले backing field पर निर्भर नहीं होती है। ऐसी properties के लिए backing field जिस code को ये delegate करती है वह provide करता है। 

Relies on Other Code for Setting and Getting Functionalities 

Delegated properties स्वयं के getters और setters भी implement नहीं करती है और ना ही ये properties default getters और setters use करती है। 

Delegated properties के लिए getter और setter functionalities वह code provide करता है जिसे ये properties delegate करती है। 

Functionality Shared Between Multiple Properties 

Delegated properties के concept से कई properties एक ही getter और setter functionality को use कर पाती है। इससे programmer को हर property के लिए अलग से getters और setters implement करने की आवश्यकता नहीं पड़ती है। 

उदाहरण के लिए आप जो भी property अपने project declare कर रहे है उसे एक map में store करना चाहते है। यदि आप default getter और setter use करते है तो by default properties की values separate fields में store की जाती है।

लेकिन आप common setters और getters implement कर सकते है और सभी properties को उस implementation को use करने के लिए configure कर सकते है। इस प्रकार आप कई properties के बीच एक common functionality को share कर सकते है।

Creating Kotlin Delegated Properties

आप var और val दोनों ही keywords के प्रयोग से एक delegated property create कर सकते है।

<var> or <val> <property-Name> : <Type> <by> <delegate>

by Keyword

Delegated properties को normal properties की तरह ही create किया जाता है। लेकिन delgetated property create करने के लिए by keyword का प्रयोग किया जाता है।

इस keyword के द्वारा आप उस delegate का नाम provide करते है जो current property के लिए getter और setter implement करता है। उदाहरण के लिए यह किसी class के constructor को call हो सकता है जो property के लिए getter और setter provide करती है।

setValue() & getValue()

ये वो methods होते है जो delegate द्वारा implement किये जाते है। इनमे setValue() method property setter की तरह और getValue() method property getter की तरह कार्य करता है।

class <delegate>
{
    operator fun getValue(thisRef: Any?, property: KProperty<*>):propertyType{
         // code to get value from property
    }

 

     operator fun setValue(thisRef:Any, property: KProperty<*>, value: propertyType) {
         //code to set value to property
     }
}

ये दोनों ही methods delegate द्वारा implement किये जाने अनिवार्य होते है। इन दोनों functions को operator function के रूप में define किया जाता है।

getValue() method में दो arguments pass किये जाते है। इनमें पहला argument thisRef उस class को refer करता है जिसमे delegated property define की गयी है। दूसरा argument स्वयं delegate property का pointer होता है और इस method द्वारा value प्राप्त करने के लिए use किया जाता है।

setValue() method में तीन arguments pass किये जाते है। इनमें first और second argument getValue() method के जैसे ही होते है और तीसरा argument वह value होती है जो आप property में set करना चाहते है। इसका type वही होता है जो property का होता है।

Example of Kotlin Delegated Properties

class myClass
{
    var myProperty: String by delegateClass()
}

 

class delegateClass
{
     operator fun getValue(thisRef: Any?, property: KProperty<*>):String{
         // code to get value from property
    }

     operator fun setValue(thisRef:Any, property: KProperty<*>, value: String) {
         //code to set value to property
     }
}

fun main(args: Array<String>)
{
    var obj = myClass()
     println(obj.myProperty)
}

 

Previous: Kotlin Visibility Modifiers
Next: Kotlin Extensions