Kotlin JetBrains द्वारा एक स्टैटिकली टाइप की गई प्रोग्रामिंग भाषा है, जो JVM पर चलती है और 2017 से Google द्वारा Android विकास के लिए आधिकारिक रूप से समर्थित है। Kotlin Java के साथ पूरी तरह से संगत है, इसमें संक्षिप्त सिंटैक्स और अंतर्निहित null सुरक्षा है। Kotlin Documentation — भाषा और मानक पुस्तकालय के लिए पूरी मार्गदर्शिका।
मुख्य बिंदु
Kotlin JetBrains (IntelliJ IDEA के डेवलपर) द्वारा बनाई गई एक स्टैटिकली टाइप की गई प्रोग्रामिंग भाषा है, जो Apache 2.0 लाइसेंस के तहत 2016 में जारी की गई थी। Kotlin JVM बाइटकोड, JavaScript और नेटिव कोड (Kotlin/Native के माध्यम से) में कंपाइल होती है। इसके मुख्य अनुप्रयोग क्षेत्र Android विकास, सर्वर-साइड एप्लिकेशन और क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट हैं।
Google ने Google I/O 2017 में Kotlin को Android विकास की आधिकारिक भाषा घोषित किया। Google (Android Developer Blog, 2026) के अनुसार, Google Play पर 85% से अधिक नए प्रोजेक्ट Kotlin का उपयोग करते हैं। यह भाषा सर्वर-साइड विकास (Spring Boot, Ktor) और मल्टीप्लेटफ़ॉर्म प्रोजेक्ट्स (Kotlin Multiplatform Mobile) में भी सक्रिय रूप से उपयोग की जाती है।
Kotlin Java के साथ पूरी तरह से संगत है — आप एक ही प्रोजेक्ट में Kotlin से Java कोड और इसके विपरीत कॉल कर सकते हैं। बिल्ड टूल्स (Gradle, Maven) दोनों भाषाओं का समर्थन करते हैं, जिससे विकास में रुकावट के बिना Java से Kotlin में क्रमिक स्थानांतरण संभव है।
मुख्य कारण: संक्षिप्तता — Kotlin को एक ही कार्य के लिए Java की तुलना में औसतन 40% कम कोड लाइनों की आवश्यकता होती है। Null सुरक्षा — कंपाइलर बिना जाँच के nullable प्रकारों के उपयोग पर रोक लगाता है। कार्यात्मक क्षमताएँ — उच्च-क्रम फ़ंक्शन, लैम्ब्डा, एक्सटेंशन फ़ंक्शन और कोरूटीन कोड को अधिक अभिव्यंजक और सुरक्षित बनाते हैं।
मूल Kotlin सिंटैक्स संक्षिप्तता और स्पष्टता को जोड़ता है। वेरिएबल val (अपरिवर्तनीय) और var (परिवर्तनीय) के माध्यम से घोषित किए जाते हैं। कंपाइलर टाइप इन्फ्रेंस का उपयोग करता है, लेकिन स्पष्ट प्रकार घोषणा समर्थित है। फ़ंक्शन fun कीवर्ड के साथ घोषित किए जाते हैं।
package com.example.intro
// स्थिरांक और चर
val appName: String = "KotlinApp" // अपरिवर्तनीय
var version = 1.0 // परिवर्तनीय, प्रकार अनुमानित
// एक्सप्रेशन बॉडी वाला फ़ंक्शन
fun sum(a: Int, b: Int) = a + b
// String templates
fun greet(name: String) = "नमस्ते, $name! संस्करण ${appName}_$version"
// Default and named arguments
fun createUser(
name: String,
age: Int = 18,
email: String? = null
)When अभिव्यक्ति Java में switch को बदलती है और अधिक लचीली है: यह प्रकार जाँच, श्रेणियाँ, शर्तें और बिना break के शाखाओं का समर्थन करती है। कंपाइलर enum और sealed क्लासेज़ के लिए व्यापक कवरेज की जाँच करता है। स्मार्ट कास्ट is जाँच के बाद स्वचालित रूप से प्रकारों को परिवर्तित करते हैं, जिससे स्पष्ट कास्ट समाप्त हो जाते हैं।
fun analyzeValue(value: Any) = when (value) {
is String -> "${value.length} लंबाई की स्ट्रिंग" // स्मार्ट कास्ट
is Int -> "पूर्णांक: $value"
in 1..10 -> "1-10 की सीमा में संख्या"
else -> "अज्ञात प्रकार"
}Null सुरक्षा Kotlin की एक प्रमुख विशेषता है जो कंपाइल समय पर NullPointerException को समाप्त करती है। Kotlin में, प्रकार डिफ़ॉल्ट रूप से null नहीं हो सकते। null की अनुमति देने के लिए, प्रकार में ? जोड़ें: String?। कंपाइलर को प्रत्येक nullable मान की स्पष्ट जाँच की आवश्यकता होती है।
// Nullable और non-null प्रकार
val nonNull: String = "हमेशा null नहीं"
val nullable: String? = null // अनुमति है
// सेफ कॉल — केवल null न होने पर निष्पादित होता है
val length: Int? = nullable?.length
// एल्विस ऑपरेटर — डिफ़ॉल्ट मान
val text: String = nullable ?: "Default text"
// Let — non-null मान के साथ ब्लॉक निष्पादित करें
nullable?.let { value ->
println("मान: $value")
}सेफ कॉल ऑपरेटर (?.) null लौटाता है यदि ऑपरेटर से पहले का ऑब्जेक्ट null है, और अन्यथा विधि/गुण को कॉल करता है। एल्विस ऑपरेटर (?:) डिफ़ॉल्ट मान प्रदान करता है यदि बायाँ भाग null है। नॉट-नल असर्शन (!!) NullPointerException फेंकता है यदि मान null है — इसका उपयोग केवल तब करें जब आप 100% सुनिश्चित हों कि मान मौजूद है।
प्लेटफ़ॉर्म प्रकार — कॉल किए गए Java कोड से Java प्रकार जिन्हें Kotlin nullable या non-null के रूप में चिह्नित नहीं कर सकता। प्रकार String! (विस्मयादिबोधक चिह्न के साथ) प्रदर्शित होता है। Java कोड के साथ काम करते समय डेवलपर स्वयं null सुरक्षा के लिए जिम्मेदार है।
Data क्लासेज़ Kotlin में स्वचालित रूप से equals(), hashCode(), toString(), copy() और componentN() उत्पन्न करती हैं। यह Java मॉडल (POJO) के बॉयलरप्लेट को समाप्त करता है और कोड को साफ बनाता है। data class घोषित करने में Java में 20-30 के बजाय एक पंक्ति लगती है।
data class User(
val id: Long,
val name: String,
val email: String,
val age: Int? = null
)
// उपयोग
val user = User(1, "अन्ना", "anna@example.com")
val updatedUser = user.copy(age = 25)
// डिस्ट्रक्चरिंग
val (id, name) = user
println("उपयोगकर्ता #$id: $name")डिस्ट्रक्चरिंग एक पंक्ति में data class को वेरिएबल में विघटित करने की अनुमति देती है। यह जोड़ियों, त्रिक और अन्य मिश्रित मानों के साथ काम करते समय सुविधाजनक है। डिस्ट्रक्चरिंग data क्लासेज़, मानक संग्रह (List, Map) और operator fun componentN() वाली किसी भी क्लास के लिए समर्थित है।
एक्सटेंशन फ़ंक्शन बिना इनहेरिटेंस के मौजूदा क्लासेज़ में नई विधियाँ जोड़ने की Kotlin तंत्र है। एक्सटेंशन रिसीवर पैरामीटर के साथ स्टैटिक विधियों में कंपाइल होते हैं, इसलिए इनहेरिटेंस की आवश्यकता नहीं है और वर्चुअल डिस्पैच समर्थित नहीं है।
// String के लिए एक्सटेंशन फ़ंक्शन
fun String.isEmail(): Boolean {
return this.contains("@") && this.contains(".")
}
// एक्सटेंशन प्रॉपर्टी
val String.isPhoneNumber: Boolean
get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))
// संग्रह के लिए जेनेरिक एक्सटेंशन
fun List<Int>.sumOfEvens(): Int {
return this.filter { it % 2 == 0 }.sum()
}
// उपयोग
println("test@mail.com".isEmail()) // trueएक्सटेंशन Android SDK और लाइब्रेरीज़ में व्यापक रूप से उपयोग किए जाते हैं। उदाहरण के लिए, Android KTX में Activity एक्सटेंशन Activity, Fragment, View और अन्य क्लासेज़ के लिए extension functions हैं। एक्सटेंशन को फ़ाइल में टॉप-लेवल फ़ंक्शन या क्लास के सदस्य एक्सटेंशन के रूप में घोषित किया जा सकता है।
कोरूटीन Kotlin में एसिंक्रोनस प्रोग्रामिंग तंत्र हैं जो अनुक्रमिक शैली में नॉन-ब्लॉकिंग कोड लिखने की अनुमति देते हैं। कोरूटीन थ्रेड को ब्लॉक किए बिना suspend फ़ंक्शन पर निष्पादन रोकता है और ऑपरेशन पूरा होने के बाद फिर से शुरू होता है। यह RxJava कॉलबैक श्रृंखलाओं और AsyncTask का विकल्प है।
import kotlinx.coroutines.*
// Suspend फ़ंक्शन — रोका जा सकता है
suspend fun fetchUserData(userId: Int): User {
// delay — suspend फ़ंक्शन, थ्रेड को ब्लॉक नहीं करता
delay(500)
return User(userId, "User $userId", "user@example.com")
}
// कोरूटीन में लॉन्च
fun loadData() {
CoroutineScope(Dispatchers.Main).launch {
val user = fetchUserData(1) // यहाँ रुकें
updateUI(user) // मुख्य थ्रेड पर जारी रखें
}
}Dispatchers कोरूटीन के लिए थ्रेड पूल निर्धारित करते हैं: Dispatchers.Main (UI थ्रेड), Dispatchers.IO (नेटवर्क/डिस्क संचालन), Dispatchers.Default (CPU-गहन कार्य)। स्ट्रक्चर्ड कंकरेंसी सुनिश्चित करता है कि कोरूटीन स्कोप पूरा होने के बाद सक्रिय न रहे — यह मेमोरी लीक को रोकता है।
// async/await के माध्यम से समानांतर निष्पादन
suspend fun loadDashboard(): Dashboard = coroutineScope {
val user = async { fetchUserData(1) }
val orders = async { fetchOrders(1) }
val stats = async { fetchStats() }
Dashboard(user.await(), orders.await(), stats.await())
}नए Android प्रोजेक्ट के लिए Kotlin और Java के बीच चुनाव एक मौलिक आर्किटेक्चरल निर्णय है। Kotlin अधिक आधुनिक सिंटैक्स और अंतर्निहित सुरक्षा तंत्र प्रदान करता है, जबकि Java के पास डेवलपर्स का व्यापक समूह और परिपक्व लाइब्रेरीज़ हैं।
| विशेषता | Kotlin | Java |
|---|---|---|
| Null सुरक्षा | अंतर्निहित (nullable/non-null) | अंतर्निहित नहीं (@Nullable एनोटेशन) |
| कोड की मात्रा | Java से −40% | बॉयलरप्लेट (getters/setters) |
| Data क्लासेज़ | data class (एक पंक्ति) | Lombok के साथ या मैन्युअल POJO |
| एसिंक्रोनस | Coroutines (suspend/await) | CompletableFuture, RxJava |
| एक्सटेंशन फ़ंक्शन | अंतर्निहित | केवल यूटिलिटी क्लासेज़ के माध्यम से |
| स्मार्ट कास्ट | is-जाँच के बाद | स्पष्ट कास्ट (Type) obj |
| पश्च संगतता | Java के साथ 100% | — |
प्रदर्शन Kotlin और Java तुलनीय है — दोनों JVM बाइटकोड में कंपाइल होते हैं। Kotlin कभी-कभी कोरूटीन और इनलाइनिंग पर माइक्रो-ओवरहेड जोड़ता है, लेकिन यह मोबाइल एप्लिकेशन के लिए नगण्य है। Google और JetBrains Kotlin में सक्रिय रूप से निवेश कर रहे हैं: Kotlin Multiplatform, Kotlin/Wasm और K2 कंपाइलर प्रदर्शन सुधार।
अक्सर पूछे जाने वाले प्रश्न
Kotlin Java से 40% छोटा है — कम बॉयलरप्लेट। Kotlin null सुरक्षा, data क्लासेज़, एक्सटेंशन फ़ंक्शन, कोरूटीन, स्मार्ट कास्ट, when अभिव्यक्तियाँ जोड़ता है। Java के साथ पूर्ण संगतता: दोनों भाषाएँ JVM पर चलती हैं और बिना विरोध के एक ही प्रोजेक्ट में उपयोग की जा सकती हैं।
प्रकार डिफ़ॉल्ट रूप से non-null होते हैं। nullable के लिए ?: String? का उपयोग करें। कंपाइलर nullable मानों तक सीधी पहुँच पर रोक लगाता है। सेफ कॉल (?.) null रिसीवर पर null लौटाता है। एल्विस ऑपरेटर (?:) डिफ़ॉल्ट मान सेट करता है। !! — संभावित अपवाद के साथ जबरन निष्कर्षण।
कोरूटीन हल्के थ्रेड हैं जो क्रमिक रूप से एसिंक्रोनस कोड लिखने की अनुमति देते हैं। suspend फ़ंक्शन थ्रेड को ब्लॉक किए बिना रुकते हैं। launch और async CoroutineScope में कोरूटीन शुरू करते हैं। नेटवर्क अनुरोधों के लिए Dispatchers.IO, UI अपडेट के लिए Dispatchers.Main।
data class स्वचालित रूप से equals(), hashCode(), toString(), copy() और componentN() उत्पन्न करता है। उदाहरण: data class User(val name: String, val age: Int)। val (name, age) = user के माध्यम से डिस्ट्रक्चरिंग। Java 14+ में record के समान, लेकिन अतिरिक्त copy() विधि के साथ।
एक्सटेंशन फ़ंक्शन मौजूदा क्लासेज़ में विधियाँ जोड़ते हैं: fun String.isEmail(): Boolean। कंपाइलर उन्हें रिसीवर पैरामीटर के साथ स्टैटिक कॉल से बदल देता है। इनहेरिटेंस की आवश्यकता नहीं है। एक्सटेंशन Android KTX में व्यापक रूप से उपयोग किए जाते हैं: view.showToast(), activity.viewModels()।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें