Kotlin JetBrains کی ایک جامد طور پر ٹائپ کی گئی پروگرامنگ زبان ہے، جو JVM پر چلتی ہے اور 2017 سے Google کی طرف سے Android ڈیولپمنٹ کے لیے سرکاری طور پر سپورٹ کی جاتی ہے۔ Kotlin Java کے ساتھ مکمل طور پر مطابقت رکھتی ہے، اس کا مختصر نحو اور بلٹ ان null safety ہے۔ 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 safety — کمپائلر بغیر جانچ کے nullable اقسام کے استعمال پر پابندی لگاتا ہے۔ فنکشنل صلاحیتیں — اعلیٰ ترتیب کے فنکشنز، لیمبڈا، extension functions اور coroutines کوڈ کو زیادہ اظہار خیال اور محفوظ بناتے ہیں۔
بنیادی 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 safety Kotlin کی ایک اہم خصوصیت ہے جو کمپائل ٹائم پر NullPointerException کو ختم کرتی ہے۔ Kotlin میں، اقسام ڈیفالٹ طور پر null نہیں ہو سکتیں۔ null کی اجازت دینے کے لیے، قسم میں ? شامل کریں: String?۔ کمپائلر ہر nullable ویلیو کی واضح جانچ کا تقاضا کرتا ہے۔
// Nullable اور non-null اقسام
val nonNull: String = "ہمیشہ null نہیں"
val nullable: String? = null // اجازت ہے
// Safe call — صرف null نہ ہونے پر عمل کرتا ہے
val length: Int? = nullable?.length
// Elvis آپریٹر — ڈیفالٹ ویلیو
val text: String = nullable ?: "Default text"
// Let — non-null ویلیو کے ساتھ بلاک چلائیں
nullable?.let { value ->
println("ویلیو: $value")
}Safe call آپریٹر (?.) null لوٹاتا ہے اگر آپریٹر سے پہلے آبجیکٹ null ہو، اور بصورت دیگر میتھڈ/پراپرٹی کو کال کرتا ہے۔ Elvis آپریٹر (?:) ڈیفالٹ ویلیو فراہم کرتا ہے اگر بائیں جانب null ہو۔ Not-null دعویٰ (!!) NullPointerException پھینکتا ہے اگر ویلیو null ہو — صرف اس وقت استعمال کریں جب آپ کو 100% یقین ہو کہ ویلیو موجود ہے۔
پلیٹ فارم اقسام — کال کیے گئے Java کوڈ سے Java اقسام جنہیں Kotlin nullable یا non-null کے طور پر نشان زد نہیں کر سکتی۔ قسم String! (تعجب کے نشان کے ساتھ) ظاہر ہوتی ہے۔ Java کوڈ کے ساتھ کام کرتے وقت ڈیولپر خود null safety کا ذمہ دار ہے۔
Kotlin میں data classes خود بخود 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 classes، معیاری کلیکشنز (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 ہیں۔ ایکسٹینشنز کو فائل میں ٹاپ لیول فنکشنز یا کلاس کے ممبر ایکسٹینشنز کے طور پر اعلان کیا جا سکتا ہے۔
Coroutines Kotlin میں غیر مطابقت پذیر پروگرامنگ کا ایک طریقہ کار ہے جو ترتیب وار اسٹائل میں نان بلاکنگ کوڈ لکھنے کی اجازت دیتا ہے۔ ایک coroutine تھریڈ کو بلاک کیے بغیر 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")
}
// Coroutine میں شروع کریں
fun loadData() {
CoroutineScope(Dispatchers.Main).launch {
val user = fetchUserData(1) // یہاں روکیں
updateUI(user) // مین تھریڈ پر جاری رکھیں
}
}Dispatchers coroutine کے لیے تھریڈ پول کا تعین کرتے ہیں: Dispatchers.Main (UI تھریڈ)، Dispatchers.IO (نیٹ ورک/ڈسک آپریشنز)، Dispatchers.Default (CPU-مشقت طلب کام)۔ سٹرکچرڈ کنکرنسی اس بات کو یقینی بناتی ہے کہ coroutine اسکوپ مکمل ہونے کے بعد فعال نہ رہے — یہ میموری لیک کو روکتا ہے۔
// 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 safety | بلٹ ان (nullable/non-null) | بلٹ ان نہیں (@Nullable تشریحات) |
| کوڈ کا حجم | Java سے −40% | بائلر پلیٹ (getters/setters) |
| Data classes | data class (ایک لائن) | Lombok کے ساتھ یا دستی POJO |
| غیر مطابقت | Coroutines (suspend/await) | CompletableFuture, RxJava |
| ایکسٹینشن فنکشنز | بلٹ ان | صرف یوٹیلیٹی کلاسز کے ذریعے |
| سمارٹ کاسٹ | is جانچ کے بعد | واضح کاسٹ (Type) obj |
| پسماندہ مطابقت | Java کے ساتھ 100% | — |
کارکردگی Kotlin اور Java کے مقابلے میں یکساں ہے — دونوں JVM بائٹ کوڈ میں کمپائل ہوتی ہیں۔ Kotlin کبھی کبھی coroutines اور inlining پر مائیکرو اوور ہیڈ ڈالتی ہے، لیکن یہ موبائل ایپلی کیشنز کے لیے نہ ہونے کے برابر ہے۔ Google اور JetBrains Kotlin میں فعال طور پر سرمایہ کاری کر رہے ہیں: Kotlin Multiplatform، Kotlin/Wasm اور K2 کمپائلر کارکردگی میں بہتری۔
اکثر پوچھے گئے سوالات
Kotlin Java سے 40% چھوٹی ہے — کم بائلر پلیٹ۔ Kotlin null safety، data classes، extension functions، coroutines، smart casts، when اظہار شامل کرتی ہے۔ Java کے ساتھ مکمل مطابقت: دونوں زبانیں JVM پر چلتی ہیں اور بغیر تنازع کے ایک ہی پروجیکٹ میں استعمال کی جا سکتی ہیں۔
اقسام ڈیفالٹ طور پر non-null ہوتی ہیں۔ nullable کے لیے ?: String? استعمال کریں۔ کمپائلر nullable اقدار تک براہ راست رسائی پر پابندی لگاتا ہے۔ Safe call (?.) null ریسیور پر null لوٹاتا ہے۔ Elvis آپریٹر (?:) ڈیفالٹ ویلیو سیٹ کرتا ہے۔ !! — ممکنہ استثنا کے ساتھ جبری نکالنا۔
Coroutines ہلکے تھریڈز ہیں جو غیر مطابقت پذیر کوڈ کو ترتیب وار لکھنے کی اجازت دیتے ہیں۔ Suspend فنکشنز تھریڈ کو بلاک کیے بغیر رک جاتے ہیں۔ launch اور async CoroutineScope میں coroutines شروع کرتے ہیں۔ نیٹ ورک کی درخواستوں کے لیے 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں