2016-07-07 12 views
15

'द्वारा' कीवर्ड कोटलिन में क्या करता है? मैं कभी कभी कुछ के पार चलो इस तरह दिखता है, जबकि एंड्रॉयड के लिए विकसित:'द्वारा' कीवर्ड कोटलिन में क्या करता है?

var someModel: someViewModel by notNullAndObservable { vm -> 
    ... 
} 

मुझे समझ नहीं आता क्या कीवर्ड 'द्वारा' के महत्व है।

+5

https://kotlinlang.org/docs/reference/delegated-properties.html –

उत्तर

29

Kotlin reference में आप by के लिए दो का उपयोग करता है मिलेगा, पहले किया जा रहा है Delegated Properties जो इस्तेमाल होता है कि आप ऊपर है:

गुण के कुछ आम प्रकार है कि, कर रहे हैं, हालांकि हम उन्हें मैन्युअल रूप से लागू कर सकते हैं कि हर समय हमें उनकी जरूरत है, एक बार और सभी के लिए लागू करने के लिए बहुत अच्छा होगा, और एक पुस्तकालय में डाल दिया। उदाहरणों में आलसी गुण शामिल हैं: मान केवल पहली पहुंच पर गणना की जाती है, अवलोकन योग्य गुण: श्रोताओं को इस संपत्ति में परिवर्तनों के बारे में अधिसूचित किया जाता है, मानचित्र में गुणों को संग्रहीत करते हैं, प्रत्येक अलग क्षेत्र में नहीं।

यहां आप गेटटर/सेटर को किसी अन्य वर्ग में प्रतिनिधि करते हैं जो काम करता है और इसमें सामान्य कोड हो सकता है। एक और उदाहरण के रूप में, कोटलिन के लिए निर्भरता इंजेक्टरों में से कुछ निर्भरता इंजेक्शन इंजन द्वारा प्रबंधित उदाहरणों की रजिस्ट्री से मूल्य प्राप्त करने के लिए गेटर को प्रतिनिधि द्वारा इस मॉडल का समर्थन करते हैं।

और Interface/Class delegation अन्य इस्तेमाल होता है:

प्रतिनिधिमंडल पैटर्न कार्यान्वयन विरासत के लिए एक अच्छा विकल्प साबित हो गया है, और Kotlin यह मूल रूप से शून्य बॉयलरप्लेट कोड की आवश्यकता होती है समर्थन करता है। एक वर्ग व्युत्पन्न एक अंतरफलक बेस से विरासत और एक निर्दिष्ट वस्तु

यहाँ आप एक और कार्यान्वयन के लिए एक इंटरफेस को सौंपने कर सकते हैं ताकि लागू करने वर्ग केवल ओवरराइड करने के लिए क्या यह बदलना चाहता है की जरूरत करने के लिए अपने सार्वजनिक विधियों में से सभी को सौंपने सकते हैं, जबकि शेष विधियां पूर्ण फुलर कार्यान्वयन पर वापस आती हैं।

एक लाइव उदाहरण Klutter Readonly/Immutable collections होगा जहां वे वास्तव में केवल विशिष्ट संग्रह इंटरफ़ेस को किसी अन्य वर्ग में प्रतिनिधि देंगे और फिर कुछ भी ओवरराइड करें जो केवल पढ़ने के कार्यान्वयन में अलग होना चाहिए। कई अन्य तरीकों को मैन्युअल रूप से प्रतिनिधि नहीं करने के लिए बहुत सारे कामों को सहेजना।

इनमें से दोनों Kotlin language reference द्वारा कवर किए गए हैं, भाषा के मूल विषयों के लिए वहां से शुरू होते हैं।

संबंधित मुद्दे