
हमारी
प्रोग्रामिंग भाषा लगातार विकसित हो रही है: हमने कोटलिन एम 3 को जारी किया - एक बड़ा मील का पत्थर, जिसमें बहुत सारी दिलचस्प चीजें शामिल थीं:
होम पेज को अपडेट करने से लेकर स्क्रिप्ट मोड का समर्थन करने तक। हमारी टीम ने भी सक्रिय "डॉगफूडिंग" शुरू किया: निकट भविष्य में कोटलिन परियोजना में अधिक से अधिक कोड कोटलिन में लिखा जाएगा।
इस पोस्ट में मैं संक्षेप में दो सबसे दिलचस्प चीजों का वर्णन करूंगा जो एम 3 में किए गए थे: बहु-घोषणाएं और संग्रह इंटरफेस के "विभाजन"।
मल्टी घोषणा
यह कैसा दिखता है अब कोटलिन में आप लिख सकते हैं, उदाहरण के लिए, निम्न कोड:
val map = hashMap("one" to 1, "two" to 2, "three" to 3) for ((k, v) in map) { println("$k -> $v") }
ध्यान दें कि कोष्ठक में दो के
लिए एक चर घोषित नहीं किया गया है। यह कई घोषणाओं, या "बहु-घोषणाओं" का एक उदाहरण है। एक सरल उदाहरण:
val (a, b) = pair
इस घोषणा के परिणामस्वरूप, दो चर दिखाई देते हैं जिन्हें एक-दूसरे से पूरी तरह से स्वतंत्र रूप से उपयोग किया जा सकता है।
यह कैसे काम करता है? अंतिम उदाहरण से घोषणा निम्नलिखित कोड में अनुवादित है:
val a = pair.component1() val b = pair.component2()
कोटलिन में कई अन्य चीजों की तरह, बहु-घोषणाएं कन्वेंशन पर आधारित होती हैं: कंपोनेंट () फ़ंक्शन को नाम से बुलाया जाता है, अर्थात, उन्हें जोड़ी क्लास और इसके बाहर दोनों में
एक्सटेंशन के रूप में घोषित किया जा सकता है। यह मानचित्र को बायपास करना संभव बनाता है जैसा कि शुरुआत में दिखाया गया था: Map.Entry के लिए दो एक्सटेंशन फ़ंक्शन घोषित किए गए हैं:
fun <K, V> Map.Entry<K, V>.component1() = getKey() fun <K, V> Map.Entry<K, V>.component2() = getValue()
सामान्य स्थिति में, प्रत्येक वर्ग को इस तरह के कार्यों को अपने तरीके से लागू करने की आवश्यकता होती है, लेकिन एक बहुत ही सामान्य मामला है: जब कोई वर्ग केवल डेटा संग्रहीत करता है और कुछ नहीं करता है। इसे "डेटा क्लास" कहा जाता है:
data class User(val name: String, val password: String) {}
"डेटा" एनोटेशन कंपाइलर को इस कक्षा में कई मानक विधियाँ उत्पन्न करने के लिए कहता है: बराबर () / हैशकोड (), स्ट्रींग () और कंपोनेंट 1 (), कंपोनेंट 2 ()। ये सभी कार्य प्राथमिक निर्माता में घोषित वर्ग गुणों का उपयोग करते हैं, उदाहरण के लिए, घटक 1 () रिटर्न नाम, और घटक 2 () रिटर्न:
val (name, pass) = getUser()
डेटा कक्षाएं, विशेष रूप से, ट्यूपल्स के उपयोग के बिना किसी फ़ंक्शन से कई मान वापस करना संभव बनाती हैं, जो कोड की पठनीयता में सुधार करता है। हमने पूरी तरह से ट्यूपल्स से छुटकारा पाने का फैसला किया, लेकिन अगर आपके पास कुछ प्रकार के कोटलिन कोड हैं जो उनका उपयोग करते हैं, तो आप
स्वचालित रूप से इसे स्थानांतरित कर सकते
हैं ।
अंग्रेजी में
इस पोस्ट में बहु-घोषणाओं के बारे में अधिक।
संग्रह के प्रकार
संग्रह हर जगह और हमेशा उपयोग किया जाता है, इसलिए एक प्रोग्रामिंग भाषा की सुविधा पुस्तकालय के संबंधित भाग के डिजाइन पर निर्भर करती है। यही कारण है कि जावा प्लेटफॉर्म पर कई "वैकल्पिक" भाषाएं अपने स्वयं के संग्रह का उपयोग करती हैं जो मानक लोगों के साथ असंगत हैं, जो जावा पुस्तकालयों का उपयोग करते समय विभिन्न कठिनाइयों का निर्माण करता है (जो कि बहुमत हैं और जिसके कारण जावा ऐसा अद्भुत मंच है)।
कोटलिन मौजूदा कोड के साथ संगतता पर केंद्रित है, इसलिए हम मानक संग्रह कक्षाओं का उपयोग करते हैं, लेकिन
उन्हें बेहतर बनाते हैं :

कृपया ध्यान दें कि संग्रह इंटरफ़ेस को केवल-पढ़ने योग्य और परिवर्तनशील में विभाजित किया गया है। अच्छे पुराने java.util.ArrayList और HashSet अभी भी उपलब्ध हैं - ये परस्पर संग्रह हैं। लेकिन अगर कहीं लिस्ट <string> कहीं लिखा गया है, तो आप इसे बदल नहीं सकते।
यह न केवल चीजों को क्रम में रखने में मदद करता है, बल्कि आपके जीवन को सरल बनाने में भी मदद करता है: अब आप सूची <स्ट्रिंग> को उस स्थान पर असाइन कर सकते हैं जहां सूची <कोई भी अपेक्षित थी, क्योंकि अपरिवर्तनीय संग्रह
सहसंयोजक हैं ।
निष्कर्ष
एम 3 में कई अन्य रोचक चीजें शामिल हैं। आप इसके बारे में और अधिक
यहाँ (अंग्रेजी में) पढ़ सकते हैं।
स्थापना निर्देश
यहाँ हैं (
IntelliJ IDEA 12 की आवश्यकता है)।
हमेशा की तरह, हम आपकी टिप्पणियों / विचारों / सुझावों के लिए आभारी रहेंगे।
अच्छा कोटलिन है :)