खोज…


डीटीओ (पीओजेओ / पीओसीओ) बनाना

कोटलिन में डेटा क्लासेस डेटा को होल्ड करने के अलावा कुछ भी करने के लिए बनाई गई क्लास हैं। ऐसी कक्षाओं को data के रूप में चिह्नित किया जाता data :

data class User(var firstname: String, var lastname: String, var age: Int)

उपरोक्त कोड स्वचालित रूप से उत्पन्न निम्नलिखित के साथ एक User वर्ग बनाता है:

  • सभी संपत्तियों के लिए गेटर्स और सेटर्स (केवल val एस के लिए गेटर्स)
  • equals()
  • hashcode()
  • toString()
  • copy()
  • componentN() (जहां N घोषणा के क्रम में संबंधित संपत्ति है)

किसी फ़ंक्शन के समान, डिफ़ॉल्ट मान भी निर्दिष्ट किए जा सकते हैं:

data class User(var firstname: String = "Joe", var lastname: String = "Bloggs", var age: Int = 20)

अधिक विवरण यहां पाया जा सकता है डेटा कक्षाएं

किसी सूची को छानना

val list = listOf(1,2,3,4,5,6)

//filter out even numbers

val even = list.filter { it % 2 == 0 }

println(even) //returns [2,4]

सार्वजनिक निर्माण में प्रदान किए बिना एक वर्ग को सौंपें

मान लें कि आप एक वर्ग को सौंपना चाहते हैं, लेकिन आप निर्माण पैरामीटर में प्रत्यायोजित वर्ग को प्रदान नहीं करना चाहते हैं। इसके बजाय, आप इसे निजी तौर पर बनाना चाहते हैं, जिससे कंस्ट्रक्टर कॉलर इससे अनजान है। पहले तो यह असंभव लग सकता है क्योंकि वर्ग प्रतिनिधिमंडल केवल निर्माण मापदंडों को सौंपने की अनुमति देता है। हालाँकि, ऐसा करने का एक तरीका है, जैसा कि इस उत्तर में दिया गया है:

class MyTable private constructor(table: Table<Int, Int, Int>) : Table<Int, Int, Int> by table {

    constructor() : this(TreeBasedTable.create()) // or a different type of table if desired

}

इसके साथ, आप सिर्फ MyTable के कंस्ट्रक्टर को इस तरह कह सकते हैं: MyTable()Table<Int, Int, Int> जिसमें MyTable प्रतिनिधियों को निजी रूप से बनाया जाएगा। कंस्ट्रक्टर कॉलर इसके बारे में कुछ नहीं जानता है।

यह उदाहरण इस एसओ प्रश्न पर आधारित है।

कोटलिन में धारावाहिक और धारावाहिक विचलन

serialVersionUID में एक वर्ग के लिए serialVersionUID बनाने के लिए आपके पास कुछ विकल्प हैं, जिसमें कक्षा के साथी ऑब्जेक्ट में एक सदस्य को शामिल करना शामिल है।

सबसे संक्षिप्त बाइटकोड एक private const val से आता है जो इस वर्ग में एक निजी स्थिर वैरिएबल बन जाएगा, इस मामले में MySpecialCase :

class MySpecialCase : Serializable {
    companion object {
        private const val serialVersionUID: Long = 123
    }
}

आप इन रूपों का उपयोग कर सकते हैं, प्रत्येक के पास गेटटर / सेटर विधियों के साइड इफेक्ट होते हैं जो क्रमबद्धता के लिए आवश्यक नहीं हैं ...

class MySpecialCase : Serializable {
    companion object {
        private val serialVersionUID: Long = 123
    }
}

यह स्थैतिक क्षेत्र बनाता है, लेकिन साथ ही साथ एक ऑब्जेक्ट बनाता है getSerialVersionUID जो कि अनावश्यक है।

class MySpecialCase : Serializable {
    companion object {
        @JvmStatic private val serialVersionUID: Long = 123
    }
}  

यह स्टैटिक फील्ड बनाता है, लेकिन स्टैटिक getSerialVersionUID साथ ही getSerialVersionUID भी बनाता है जिसमें क्लास MySpecialCase जो अनावश्यक है।

लेकिन सभी serialVersionUID को एक Serializable क्लास में जोड़ने की विधि के रूप में काम करते हैं।

कोटलिन में धाराप्रवाह तरीके

कोटलिन में धाराप्रवाह तरीके जावा के समान हो सकते हैं:

fun doSomething() {
   someOtherAction()
   return this
}

लेकिन आप एक्सटेंशन फ़ंक्शन बनाकर उन्हें और अधिक कार्यात्मक बना सकते हैं जैसे:

fun <T: Any> T.fluently(func: ()->Unit): T {
    func()
    return this
}

जो तब अधिक स्पष्ट रूप से धाराप्रवाह कार्यों की अनुमति देता है:

fun doSomething() {
   return fluently { someOtherAction() }
}

अशक्त वस्तुओं के साथ काम करने को आसान बनाने के लिए लेट या भी का उपयोग करें

let Kotlin एक स्थानीय वस्तु इस पर बुलाया गया था से बाध्यकारी बनाता में। उदाहरण:

val str = "foo"
str.let {
    println(it) // it
}  

यह "foo" को प्रिंट करेगा और Unit को लौटा देगा।

let और also बीच का अंतर also है कि आप let ब्लॉक से किसी भी मूल्य को वापस कर सकते हैं। also दूसरे हाथ में हमेशा Unit

अब यह क्यों उपयोगी है, आप पूछें? क्योंकि यदि आप एक ऐसी विधि कहते हैं, जो null और आप केवल कुछ कोड चलाना चाहते हैं, जब वह वापसी मान null नहीं है तो आप let उपयोग कर सकते हैं या ऐसा also कर सकते हैं:

val str: String? = someFun()
str?.let {
    println(it)
}

कोड का यह टुकड़ा केवल let ब्लॉक को चलाएगा जब str null नहीं होगा। null सुरक्षा ऑपरेटर ( ? ) पर ध्यान दें।

ऑब्जेक्ट्स को इनिशियलाइज़ करने के लिए या मेथड चैनिंग हासिल करने के लिए लागू करें

apply का प्रलेखन निम्नलिखित कहता है:

साथ निर्दिष्ट समारोह ब्लॉक कॉल this अपने रिसीवर के रूप में मूल्य और रिटर्न this मूल्य।

जबकि kdoc इतना उपयोगी नहीं है apply वास्तव में एक उपयोगी कार्य है। आम आदमी की शर्तों में apply एक गुंजाइश है जिसमें this आपके द्वारा apply गई वस्तु के लिए बाध्य है। यह आपको कुछ कोड को बंद करने में सक्षम बनाता है जब आपको किसी ऑब्जेक्ट पर कई तरीकों को कॉल करने की आवश्यकता होती है जिसे आप बाद में वापस कर देंगे। उदाहरण:

File(dir).apply { mkdirs() }

इसे लिखने के समान है:

fun makeDir(String path): File {
    val result = new File(path)
    result.mkdirs()
    return result
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow