Kotlin in Hindi : Properties

  • Introduction to kotlin properties in Hindi
  • Late initialized kotlin properties in Hindi
  • Overriding kotlin properties in Hindi

Introduction to Kotlin Properties

Kotlin में classes के लिए properties का concept introduce किया गया है। Properties का concept java में available नहीं है।

Member of a Class

एक property class का member होती है जिसमें value assignment और access को getter और setters द्वारा control किया जाता है। Properties के माध्यम से आप महत्वपूर्ण data को secure way में class के बाहर represent कर पाते है।

Used to Implement Abstraction

Abstraction object oriented programming का बहुत important feature है। इसका अर्थ होता है की user से data (variables) को hide कर लिया जाये और सिर्फ interface (functions) show किया जाये ताकि user data से कोई छेड़छाड़ न कर सके।

Java में इसे implement करने के लिए  class के अंदर private fields create किये जाते है। इन fields को class के बाहर के code द्वारा use करने के लिए setter और getter functions provide किये जाते है।

इन functions द्वारा इन private fields में set की जाने वाली और access की जाने वाली value को control किया जाता है। Getter और setter functions ऐसे fields के साथ कार्य करने के लिए interface का कार्य करते है।

लेकिन kotlin में आपको अलग से getter और setter functions define करने की आवश्यकता नहीं होती है। Kotlin में आपको properties provide की गयी है जो खुद के default getters और setters के साथ आती है। इसके अलावा आप स्वयं के custom getter और setter भी define कर सकते है। Properties के द्वारा kotlin में abstraction achive किया जाता है।

Can Be Mutable or Immutable

Kotlin properties normal variables की ही तरह changeable या read-only हो सकती है। 

Immutable properties create करने के लिए val keyword का प्रयोग किया जाता है। 

val <property-Name> <:> <data-Type> = <value>

Mutable properties create करने के लिए आपको var keyword use करना चाहिए।

var <property-Name> <:> <data-Type> = <value>

Use Like Normal Java Fields

एक बार define करने के बाद आप properties को normal java fields की तरह use कर सकते है। आप normal java fields की तरह इन्हें set कर सकते है और print भी कर सकते है।

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

class propDemo
{
    var Name: String = “Best Hindi Tutorials”

Getter and Setters

Kotlin properties default getter और setters के साथ आती है। लेकिन आप स्वयं के भी custom getter और setters define कर सकते है। Custom getter और setters define करना optional है।

<val> or <var> <property-Name><:><data-Type> = <Initializer>
<getter>
<setter> // In case of read-only property declared using val keyword setter is not defined

Read Only Properties Does Not Allow a Setter

Kotlin में read only property दो प्रकार से अलग होती है। एक तो यह की read only property को val keyword द्वारा define किया जाता है। दूसरा यह की read only property में setter नहीं define किया जाता है। 

<val> <property-Name> <:> <data-Type> = <Initializer>
<getter>

Write Like Normal Functions

Kotlin में properties के custom getter और setters को normal functions की तरह define किया जा सकता है। 

property-declaration

get() = field  //Getter

set(value)     //Setter
{
   field = value
}

यह kotlin में properties का default implementation होता है। इसमें आप अपनी आवश्यकता के अनुसार changes  कर सकते है।

Value is Default Convention for Setter

जैसा की आप setter में देख पा रहे है setter के parameter के रूप में value (name) को use किया गया है। यह setter में use करने के लिए kotlin द्वारा provide किया गया default convention होता है। ये property को assign की जाने वाली value को represent करता है। 

लेकिन यह अनिवार्य नहीं है की आप इसे ही use करे। आप अपनी इच्छा अनुसार कोई दूसरा नाम भी use कर सकते है। 

Backing Fields

Properties के custom getters और setters define करते समय आप backing field identifier को भी use करते है। 

Kotlin classes में आप directly कोई field नहीं define कर सकते है। यदि आपने C# properties के बारे में पढ़ा होगा तो आप इसे आसानी से समझ जायेंगे। 

C# में properties से पूर्व private fields define किये जाते है। इसके बाद उस field के लिए properties define की जाती है और उस field का प्रयोग करते हुए getters और setters define किये जाते है।

Kotlin Automatically Generates It 

Kotlin में जब भी आपको field की आवश्यकता होती है तो kotlin इसे automatically provide कर देती है। इसे backing field कहा जाता है और field identifier द्वारा denote किया जाता है।

एक backing field केवल तब ही generate किया जाता है जब property getters और setters का default implementation use करती है। या फिर तब जब किसी custom getter या setter से इसे manually refer किया जाता है।

Refers to Properties Inside Getters and Setters

Backing field के द्वारा आप getters और setters के बीच property को refer करते है। यदि आप property का नाम getters और setters में use करते है तो इससे recursive loop create हो जाता है और stack overflow error generate हो जाती है। 

Can Only Be Used in Getters and Setters 

Backing field का प्रयोग सिर्फ getters और setters के अंदर ही किया जा सकता है। क्योंकि यह identifier property को denote करता है।

Late Initialized Properties

जब भी आप किसी property को null से initialize करते है तो यह आवश्यक हो जाता है की उसे use करते समय null check perform करें। क्योंकि यह हो सकता है की उस property को किसी real value द्वारा initialize ही नहीं किया गया हो और उसमे अब भी null हो।

var <property-Name> <:> <non-Null-Type>? = null  //Declaring null property

<property-name>!!.<any-Method>()   //Performing null check

लेकिन कई बार ऐसा हो सकता है की जब आप किसी property को declare कर रहे तो आप उसे null declare करना चाहते है लेकिन जब आप उसे use करे तो बार बार null check नहीं perform करना चाहते है। यह तब संभव होता है जब आप पूरी तरह सुनिश्चित होते है की उस property में एक non null value ही होगी।

Sometimes a Property Must be Null 

इसके अलावा कई बार ऐसा भी हो सकता है की आप property को dependency injection या किसी setup method के द्वारा initialize करना चाहते है। ऐसी situations में आपको पहले property को null से intialize करना ही पड़ेगा। ऐसी sitiuations में property को primary constructor में भी नहीं define किया जा सकता है।

ऐसी situations में आप late initialized properties create कर सकते है। ऐसी properties को बिना किसी null check के use किया जा सकता है।

lateinit Modifier

Late initialized properties को lateinit modifier द्वारा declare किया जाता है। 

lateinit var <property-Name> : <non-Null-Type>   //Declaring non null property

//initialize property in between using any method

//use property without any null check 

Only Mutable Properties Can Be Late Initialized 

Kotlin में सिर्फ mutable (जिसे var keyword द्वारा declare किया गया हो) properties को ही lateinit modifier द्वारा declare किया जा सकता है। यदि property val keyword द्वारा declare की गयी है तो उसके साथ आप lateinit modifier नहीं use कर सकते है। 

Only With Default Accessors

केवल उन ही properties को late initialize किया जा सकता है जो default accessors को use करती है। यदि property custom getter और setter define करती है तो ऐसी property को late initialize नहीं किया जा सकता है।  

Only Non-Null Type Property

केवल उन्हीं properties को late initialize किया जा सकता है जो non null primitive type की हो। सभी type की properties को late initialize नहीं किया जा सकता है।

Previous: Kotlin Classes
Next: Kotlin Class Inheritance