कोटलिन

कोटलिन (Kotlin) () एक बहु-मंच, स्थैतिक रूप से टाइप की गई, व्यापक-उद्देशीय उच्च स्तरीय प्रोग्रामिंग भाषा है जिसमें टाइप अनुमान की सुविधा है। कोटलिन को जावा के साथ पूरी तरह से आपस में काम करने के लिए बनाया गया है, और कोटलिन की मानक लाइब्रेरी का जेवीएम संस्करण जावा क्लास लाइब्रेरी पर निर्भर करता है, लेकिन टाइप अनुमान इसके वाक्य विन्यास को अधिक संक्षिप्त बनाने की अनुमति देता है। कोटलिन मुख्य रूप से JVM को लक्षित करता है, लेकिन यह जावास्क्रिप्ट (जैसे कि रियेक्ट का उपयोग करने वाले फ्रंटएंड वेब अनुप्रयोगों के लिए) या LLVM के माध्यम से मशीनी भाषा (जैसे कि एंड्रॉइड ऐप्स के साथ बिजनेस लॉजिक साझा करने वाले नेटिव आईओएस ऐप्स के लिए) में भी संकलित होता है। भाषा के विकास की लागत जेटब्रेन्स द्वारा वहन की जाती है, जबकि कोटलिन फाउंडेशन कोटलिन ट्रेडमार्क की रक्षा करता है।

7 मई 2019 को, गूगल ने घोषणा की कि कोटलिन प्रोग्रामिंग भाषा एंड्रॉइड ऐप डेवलपर्स के लिए उसकी पसंदीदा भाषा बन गई है। अक्टूबर 2017 में Android Studio 3.0 की रिलीज के बाद से, कोटलिन को मानक जावा कंपाइलर के विकल्प के रूप में शामिल किया गया है। एंड्रॉइड कोटलिन कंपाइलर डिफ़ॉल्ट रूप से जावा 8 बाइटकोड उत्सर्जित करता है (जो किसी भी बाद के JVM में चलता है), लेकिन अनुकूलन के लिए जावा 9 से 24 तक को लक्षित करने की अनुमति देता है; इसमें जावा 16 में पेश किए गए और कोटलिन 1.5 के रूप में स्थिर माने जाने वाले JVM के लिए द्विदिश रिकॉर्ड क्लास इंटरऑपरेबिलिटी समर्थन है।

कोटलिन में Kotlin/JS के साथ वेब के लिए समर्थन है, जो दिसंबर 2022 में जारी संस्करण 1.8 के बाद से स्थिर घोषित किया गया है। कोटलिन/नेटिव (जैसे Apple silicon समर्थन के लिए) को नवंबर 2023 में जारी संस्करण 1.9.20 के बाद से स्थिर घोषित किया गया है।

इतिहास

नाम
यह नाम सेंट पीटर्सबर्ग के पास फ़िनलैंड की खाड़ी में स्थित एक रूसी द्वीप कोटलिन द्वीप से लिया गया है। कोटलिन के पूर्व मुख्य डिजाइनर एंड्री ब्रेस्लाव ने उल्लेख किया कि टीम ने जावा प्रोग्रामिंग भाषा की नकल करते हुए एक द्वीप के नाम पर इसका नाम रखने का फैसला किया, जो इंडोनेशियाई द्वीप जावा के साथ नाम साझा करती है।

विकास
कोटलिन गिट (Git) रिपॉजिटरी में पहला कमिट 8 नवंबर 2010 को किया गया था।

जुलाई 2011 में, जेटब्रेन्स ने प्रोजेक्ट कोटलिन का अनावरण किया, जो JVM के लिए एक नई भाषा थी और एक साल से विकास के अधीन थी। जेटब्रेन के प्रमुख दिमित्री जेमेरोव ने कहा कि अधिकांश भाषाओं में वे विशेषताएं नहीं थीं जिनकी वे तलाश कर रहे थे, सिवाय स्काला के। हालाँकि, उन्होंने स्काला के धीमे संकलन समय को एक कमी के रूप में उद्धृत किया। कोटलिन के घोषित लक्ष्यों में से एक जावा जितनी जल्दी संकलित करना है। फरवरी 2012 में, जेटब्रेन ने अपाचे 2 लाइसेंस के तहत परियोजना को ओपन सोर्स कर दिया।

जेटब्रेन को उम्मीद थी कि कोटलिन IntelliJ IDEA की बिक्री को बढ़ाएगा।

कोटलिन 1.0 को 15 फरवरी 2016 को जारी किया गया था। इसे पहली आधिकारिक स्थिर रिलीज माना जाता है और जेटब्रेन ने इस संस्करण के साथ शुरू होने वाली दीर्घकालिक बैकवर्ड संगतता के लिए प्रतिबद्धता जताई है।

Google I/O 2017 में, गूगल ने एंड्रॉइड पर कोटलिन के लिए प्रथम श्रेणी के समर्थन की घोषणा की। 7 मई 2019 को, गूगल ने घोषणा की कि कोटलिन प्रोग्रामिंग भाषा अब एंड्रॉइड ऐप डेवलपर्स के लिए इसकी पसंदीदा भाषा है।

डिज़ाइन
विकास प्रमुख एंड्री ब्रेस्लाव ने कहा है कि कोटलिन को एक औद्योगिक-शक्ति वाली ऑब्जेक्ट ओरिएंटेड भाषा और जावा की तुलना में एक "बेहतर भाषा" के रूप में डिज़ाइन किया गया है, लेकिन फिर भी यह जावा कोड के साथ पूरी तरह से इंटरऑपरेबल है, जिससे कंपनियों को जावा से कोटलिन में धीरे-धीरे प्रवास करने की अनुमति मिलती है।

कथन टर्मिनेटर के रूप में सेमीकोलन वैकल्पिक हैं; अधिकांश मामलों में कंपाइलर के लिए यह निष्कर्ष निकालने के लिए एक नई लाइन पर्याप्त होती है कि कथन समाप्त हो गया है।

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

कोटलिन में स्काला का प्रभाव ऑब्जेक्ट ओरिएंटेड और कार्यात्मक प्रोग्रामिंग दोनों के लिए व्यापक समर्थन में और कई विशिष्ट विशेषताओं में देखा जा सकता है:
 परिवर्तनशील और अपरिवर्तनीय वेरिएबल्स के बीच अंतर है (var बनाम val कीवर्ड)
 सभी क्लासेज डिफ़ॉल्ट रूप से सार्वजनिक और फाइनल (गैर-विरासत योग्य) होती हैं
 फंक्शन्स और मेथड्स डिफॉल्ट आर्गुमेंट्स, वेरिएबल-लेंथ आर्गुमेंट सूचियों और नमित आर्गुमेंट्स (named arguments) का समर्थन करते हैं

कोटलिन 1.3 ने अनुबंधों (contracts) के लिए समर्थन जोड़ा, जो मानक लाइब्रेरी घोषणाओं के लिए स्थिर हैं, लेकिन उपयोगकर्ता-परिभाषित घोषणाओं के लिए अभी भी प्रयोगात्मक हैं। अनुबंध एफ़िल के design by contract प्रोग्रामिंग प्रतिमान से प्रेरित हैं।

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

वाक्य विन्यास (Syntax)

प्रक्रियात्मक प्रोग्रामिंग शैली
कोटलिन जावा के उस प्रतिबंध को ढीला करता है जिसमें स्टेटिक मेथड्स और वेरिएबल्स केवल क्लास बॉडी के भीतर ही मौजूद हो सकते हैं। स्टेटिक ऑब्जेक्ट्स और फंक्शन्स को क्लास स्तर की आवश्यकता के बिना पैकेज के शीर्ष स्तर पर परिभाषित किया जा सकता है। जावा के साथ संगतता के लिए, कोटलिन एक JvmName एनोटेशन प्रदान करता है जो जावा प्रोजेक्ट से पैकेज देखे जाने पर उपयोग किए जाने वाले क्लास नाम को निर्दिष्ट करता है। उदाहरण के लिए, @file:JvmName("JavaClassName")।

मुख्य प्रवेश बिंदु (Main entry point)

जैसा कि सी, सी++, सी#, जावा और गो (Go) में होता है, कोटलिन प्रोग्राम का प्रवेश बिंदु "main" नामक एक फंक्शन होता है, जिसमें किसी भी कमांड-लाइन आर्गुमेंट वाली एक ऐरे (array) पास की जा सकती है। कोटलिन 1.3 से यह वैकल्पिक है। पर्ल, पीएचपी और यूनिक्स शेल शैली की स्ट्रिंग इंटरपोलेशन समर्थित है। टाइप अनुमान भी समर्थित है।

// हैलो, वर्ल्ड! उदाहरण
fun main() {
    val scope = "World"
    println("Hello, $scope!")
}

fun main(args: Array<String>) {
    for (arg in args) {
        println(arg)
    }
}

एक्सटेंशन फंक्शन्स
C# के समान, कोटलिन नए फंक्शन्स के साथ एक व्युत्पन्न क्लास बनाने की औपचारिकताओं के बिना किसी भी क्लास में एक एक्सटेंशन फंक्शन जोड़ने की अनुमति देता है। एक एक्सटेंशन फंक्शन की क्लास के सभी सार्वजनिक इंटरफेस तक पहुंच होती है।

package org.wikipedia.examples

fun String.lastChar(): Char = get(length - 1)

println("Kotlin".lastChar()) // प्रिंट करता है: n

डेटा क्लासेज (Data classes)
कोटलिन का data class उन क्लासेज को परिभाषित करता है जिनका प्राथमिक उद्देश्य डेटा संग्रहीत करना है, जो जावा के record प्रकारों के समान है। मुख्य मेथड्स equals, hashCode और toString क्लास गुणों से स्वचालित रूप से उत्पन्न होते हैं।

कोटलिन इंटरैक्टिव शेल
$ kotlinc-jvm
type :help for help; :quit for quit
>>> 2 + 2
4
>>> println("Hello, World!")
Hello, World!

एक स्क्रिप्टिंग भाषा के रूप में कोटलिन
कोटलिन का उपयोग स्क्रिप्टिंग भाषा के रूप में भी किया जा सकता है। स्क्रिप्ट एक कोटलिन सोर्स फाइल है जिसमें  फ़ाइल एक्सटेंशन का उपयोग किया जाता है।

नल सुरक्षा (Null safety)
कोटलिन nullable और गैर-नलेबल डेटा प्रकारों के बीच अंतर करता है। सभी नलेबल ऑब्जेक्ट्स को टाइप नाम के बाद "?" पोस्टफिक्स के साथ घोषित किया जाना चाहिए।

  (सुरक्षित नेविगेशन ऑपरेटर) का उपयोग संभवतः नल ऑब्जेक्ट के मेथड या प्रॉपर्टी तक सुरक्षित रूप से पहुँचने के लिए किया जा सकता है।
  (नल कोयलेसिंग ऑपरेटर) को अक्सर एल्विस ऑपरेटर कहा जाता है।

fun sayHello(maybe: String?, neverNull: Int) {
    // एल्विस ऑपरेटर का उपयोग
    val name: String = maybe ?: "stranger"
    println("Hello $name")
}

उपकरण (Tools)

 Android Studio (IntelliJ IDEA पर आधारित) में एंड्रॉइड स्टूडियो 3 से कोटलिन के लिए आधिकारिक समर्थन है।
 सामान्य जावा बिल्ड टूल्स के साथ एकीकरण समर्थित है, जिसमें Apache Maven, Apache Ant, और Gradle शामिल हैं।
 एक्लिप्स के लिए जेटब्रेन एक प्लगइन भी प्रदान करता है।
 IntelliJ IDEA में कोटलिन के लिए प्लग-इन समर्थन है।

कोटलिन मल्टीप्लेटफ़ॉर्म
कोटलिन मल्टीप्लेटफ़ॉर्म एक एकल कोडबेस को विंडोज़, लिनक्स, वेब, एंड्रॉइड और iOS जैसे कई प्लेटफ़ॉर्म को लक्षित करने की अनुमति देता है।

अनुप्रयोग
जब मई 2017 में Google I/O में कोटलिन को आधिकारिक एंड्रॉइड विकास भाषा के रूप में घोषित किया गया था, तो यह जावा और सी++ के बाद एंड्रॉइड के लिए पूरी तरह से समर्थित तीसरी भाषा बन गई। 2020 तक, कोटलिन एंड्रॉइड पर सबसे व्यापक रूप से उपयोग की जाने वाली भाषा थी, गूगल का अनुमान है कि प्ले स्टोर पर शीर्ष 1,000 ऐप्स में से 70% कोटलिन में लिखे गए थे। गूगल के पास स्वयं कोटलिन में लिखे गए 60 ऐप्स थे, जिनमें मैप्स और ड्राइव शामिल हैं।

Spring Framework ने आधिकारिक तौर पर 4 जनवरी 2017 को संस्करण 5 के साथ कोटलिन समर्थन जोड़ा।

इसे भी देखें

 प्रोग्रामिंग भाषाओं की तुलना
 List of Java software and tools
 Outline of the Java programming language

संदर्भ

बाहरी कड़ियाँ


श्रेणी:2011 के सॉफ्टवेयर
श्रेणी:उच्च स्तरीय क्रमादेशन भाषा
श्रेणी:जावा आभासी मशीन
श्रेणी:प्रोग्रामिंग भाषा
श्रेणी:ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग
श्रेणी:स्थैतिक टाइपिंग प्रोग्रामिंग भाषाएँ
श्रेणी:जावा