موبائل ڈویلپمنٹ میں Kotlin خصوصیات: یہ کیا ہے، کون سی ساخت اور یہ کیسے کام کرتی ہے

مصنف: IT Sectr اشاعت: 2026-06-29 مطالعے کا وقت: 11 منٹ

Kotlin Android ڈویلپمنٹ کی بنیادی زبان ہے۔ Google Android Docs (2025) کے مطابق، Android کے 95% سے زیادہ نئے پروجیکٹ Kotlin استعمال کرتے ہیں۔ Kotlin خصوصیات کو سمجھنا — data class، sealed class، coroutines اور scope functions — Android ڈویلپر کے لیے لازمی ضرورت ہے۔

اہم نکات

  • data class — equals/hashCode/toString/copy/componentN کی خودکار تخلیق۔ ڈیٹا ماڈلز کے لیے۔ sealed class — when جانچ کے ساتھ محدود ٹائپ کا درجہ بندی۔
  • Scope functions: let, run, with, apply, also۔ سیاق (it vs this) اور واپسی کی قیمت کے لحاظ سے مختلف۔
  • Coroutines: launch (fire-and-forget)، async (نتیجے کے ساتھ)، runBlocking (پل)، withContext (Dispatcher تبدیل کرنا)۔
  • lifecycleScope اور viewModelScope — دستی منسوخی کے بغیر Lifecycle-aware coroutines۔
  • reified — inline فنکشنز میں ٹائپ کا تحفظ۔ lateinit/lazy — تاخیری ابتداء۔

کلاسز (data class, sealed class, object, companion object)

Kotlin Java سے کلاس کے تصورات کو وسعت دیتی ہے۔ data class، sealed class، object اور companion object — ایسی ساخت جو Java میں موجود نہیں ہیں یا مختلف طریقے سے لاگو کی گئی ہیں۔

data class بمقابلہ sealed class

data class — ایک کلاس جو خودکار طور پر equals()، hashCode()، toString()، copy() اور componentN() تیار کرتی ہے۔ ڈیٹا ماڈل (DTO، Entity) کے لیے مثالی۔ تقاضے: پرائمری کنسٹرکٹر میں کم از کم ایک پیرامیٹر، val/var، open/sealed/inner نہیں ہو سکتا۔ sealed class — محدود ذیلی کلاس کے درجہ بندی والی کلاس۔ تمام ذیلی کلاسز کمپائل ٹائم پر معلوم ہوتی ہیں اور اسی فائل میں اعلان کردہ ہوتی ہیں۔ sealed class کے ساتھ when ایکسپریشن کو else برانچ کی ضرورت نہیں ہوتی۔ sealed interface (Kotlin 1.9+) — sealed class جیسی لیکن متعدد وراثت کی اجازت دیتی ہے۔ object — سنگلٹن، object کلیدی لفظ (class نہیں) سے اعلان کردہ۔ تھریڈ سیف سست ابتداء۔ companion object — کلاس کے جامد اراکین۔ اس کا ایک نام ہوتا ہے (ڈیفالٹ Companion)۔ انٹرفیس لاگو کر سکتا ہے اور extension functions رکھ سکتا ہے۔

قسم وضاحت استعمال
data classequals، hashCode، toString، copy کی خودکار تخلیقڈیٹا ماڈل، DTO، Entity
sealed classمحدود درجہ بندی، when جانچحالات، نتیجہ، UI State
sealed interfacesealed class + متعدد وراثتواقعات، اعمال (Kotlin 1.9+)
objectسنگلٹن (اعلانیہ)Factory، Utility، مستقل
companion objectکلاس کے جامد اراکینFactory Method، جامد مستقل
enum classمستقل کے ساتھ گنتیمقررہ سیٹ کے ساتھ حالات

data class — 90% ماڈلز کے لیے۔ sealed class — UI State اور نتیجہ کے لیے۔ object — سنگلٹن کے لیے۔ IT Sectr تمام اسکرین حالات (Loading، Success، Error) کے لیے sealed class تجویز کرتا ہے۔

عملی طور پر Sealed class

Sealed class — حالات کو ماڈل کرنے کے لیے ایک طاقتور ٹول۔ مثال: UiState<T> ذیلی کلاسز Loading، Success(data: T)، Error(message: String) کے ساتھ۔ when ایکسپریشن تمام حالات کی ہینڈلنگ کو یقینی بناتا ہے۔ Sealed interface — واقعات اور اعمال کے لیے جہاں متعدد نفاذ کی ضرورت ہے۔ Value class (Kotlin 1.5+) — اوورہیڈ کے بغیر ایک قدر کے لیے ریپر۔ ٹائپ سیف شناخت کنندگان کے لیے استعمال: @JvmInline value class UserId(val id: String).

فنکشنز (extension, inline, higher-order, scope functions)

Extension Function — وراثت کے بغیر موجودہ کلاس میں طریقہ شامل کرنا۔ fun String.isEmail(): Boolean. Extension Property — خصوصیات کے لیے وہی (بیکنگ فیلڈ کے بغیر)۔ Inline Function — فنکشن باڈی کو کال سائٹ پر داخل کرنا — کال اوورہیڈ کے بغیر۔ لیمبڈا کے ساتھ higher-order فنکشنز کے لیے استعمال۔ Higher-Order Function — ایک فنکشن جو دوسرا فنکشن لیتا یا لوٹاتا ہے۔ Scope Functions — آبجیکٹ سیاق کے ساتھ کام کرنے کے لیے پانچ فنکشنز: let، run، with، apply، also۔

Scope Functions

let — سیاق it، لیمبڈا نتیجہ لوٹاتا ہے۔ null-safe کالز کے لیے استعمال (?.let {})۔ apply — سیاق this، سیاق لوٹاتا ہے۔ آبجیکٹ کنفیگریشن کے لیے۔ run — سیاق this، لیمبڈا نتیجہ لوٹاتا ہے۔ سیاق کے ساتھ حسابات کے لیے۔ also — سیاق it، سیاق لوٹاتا ہے۔ ضمنی اثرات (لاگنگ) کے لیے۔ with — extension نہیں، سیاق this، لیمبڈا نتیجہ لوٹاتا ہے۔ آبجیکٹ پر آپریشنز کے گروپ کے لیے۔ Lambda — گمنام فنکشن۔ Destructuring Declaration — data class کو متغیرات میں الگ کرنا: val (name, age) = person.

Inline + reified

Inline function reified کے ساتھ — JVM میں جنیرک ٹائپ کو محفوظ رکھنے کا واحد طریقہ۔ استعمال: ٹائپ سیف بلڈر (Gson.fromJson<T>())، ٹائپ چیک (is T)، کلاس حاصل کرنا (T::class)۔ Crossinline اور Noinline — inline فنکشنز میں لیمبڈا پیرامیٹرز کے لیے موڈیفائر۔ crossinline — non-local return کو روکتا ہے، noinline — مخصوص لیمبڈا کے انلائننگ کو روکتا ہے۔ IT Sectr صرف ٹائپ کے ساتھ کام کرتے وقت inline + reified تجویز کرتا ہے؛ عام higher-order فنکشنز کے لیے، inline بائٹ کوڈ کا سائز بڑھا سکتا ہے۔

Coroutines (Coroutine Builder, Dispatchers, Scope)

Coroutines — غیر متزامن پروگرامنگ کے لیے ہلکے تھریڈ۔ تھریڈ کو بلاک نہیں کرتے — معطل (suspend) ہوتے ہیں۔ suspend function — ایک فنکشن جو تھریڈ کو بلاک کیے بغیر معطل ہو سکتا ہے۔ صرف کسی coroutine یا کسی اور suspend function سے کال کیا جا سکتا ہے۔

CoroutineScope

CoroutineScope — coroutines کا دائرہ کار۔ اس میں CoroutineContext (Job + Dispatcher) ہوتا ہے۔ lifecycleScope — Activity/Fragment کے لیے (Lifecycle-aware)۔ viewModelScope — ViewModel کے لیے (onCleared() پر خودکار منسوخی)۔ GlobalScope — عالمی دائرہ کار (پروڈکشن میں استعمال نہ کریں — میموری لیک)۔ Dispatchers: Dispatchers.Main (UI)، Dispatchers.IO (نیٹ ورک/ڈسک)، Dispatchers.Default (CPU-متمرکز)، Dispatchers.Unconfined (تجویز نہیں کیا جاتا)۔ launch — coroutine شروع کرتا ہے: Job۔ async — نتیجے کے ساتھ شروع کرتا ہے: Deferred<T>۔ runBlocking — بلاک کرنے والا پل۔ withContext — suspend فنکشن کے اندر Dispatcher تبدیل کرتا ہے۔

kotlin
// ViewModel میں ڈیٹا لوڈ کرنے کی مثال coroutines
class MainViewModel : ViewModel() {
    private val _state = MutableStateFlow<UiState>(UiState.Loading)
    val state: StateFlow<UiState> = _state.asStateFlow()

    fun loadData() {
        viewModelScope.launch {
            _state.value = UiState.Loading
            try {
                val data = withContext(Dispatchers.IO) {
                    repository.fetchData()
                }
                _state.value = UiState.Success(data)
            } catch (e: Exception) {
                _state.value = UiState.Error(e.message)
            }
        }
    }
}

// async کے ساتھ متوازی درخواستیں
suspend fun loadCombinedData(): CombinedData = coroutineScope {
    val users = async(Dispatchers.IO) { api.getUsers() }
    val posts = async(Dispatchers.IO) { api.getPosts() }
    CombinedData(users.await(), posts.await())
}

viewModelScope.launch — ViewModel میں معیاری coroutine آغاز۔ withContext(Dispatchers.IO) — نیٹ ورک کی درخواست کے لیے IO تھریڈ پر سوئچ کرنا۔ Dispatchers تعین کرتے ہیں کہ coroutine کس تھریڈ پول پر عمل کرتی ہے۔ IT Sectr ViewModel کے لیے viewModelScope اور Activity/Fragment کے لیے lifecycleScope تجویز کرتا ہے۔

جدید خصوصیات (reified, destructuring, lateinit/lazy)

reified — inline فنکشنز میں ٹائپ موڈیفائر۔ ٹائپ استعمال کرنے کی اجازت دیتا ہے: T::class، is T، as T۔ reified کے بغیر، JVM میں جنیرکس مٹ جاتے ہیں (type erasure)۔ inline fun + reified — ٹائپ سیف API کے لیے طاقتور مجموعہ۔ Destructuring Declaration — val (x, y) = point۔ data class اور componentN() والی ٹائپ کے لیے کام کرتا ہے۔ typealias — ٹائپ عرف: typealias Callback = (String) -> Unit. lateinit — var کی تاخیری ابتداء (dependency injection کے لیے)۔ تھریڈ سیف نہیں۔ lazy — val کی سست ابتداء (ڈیفالٹ طور پر تھریڈ سیف)۔ lazy(LazyThreadSafetyMode.NONE) — مطابقت پذیری کے بغیر۔ Extension function اور Extension property — وراثت کے بغیر فعالیت شامل کرنا۔ Kotlin ایک ایسی زبان ہے جہاں extension functions 90% یوٹیلیٹی کام حل کرتے ہیں۔

مختار خصوصیات

Delegated Properties — getter/setter کو کسی دوسرے آبجیکٹ کو سونپنا۔ معیاری مختار: lazy، observable، vetoable، map۔ getValue/setValue آپریٹرز کے ذریعے کسٹم مختار۔ by — مختار کلیدی لفظ: val name by lazy { loadName() }۔ مختار خصوصیات ViewModel مختار (by viewModels()) کی بنیاد ہیں۔ IT Sectr تاخیری ابتداء کے لیے lazy اور تبدیلیوں کی نگرانی کے لیے Delegates.observable تجویز کرتا ہے۔

خصوصیت وضاحت مثال
reifiedinline میں جنیرک ٹائپ محفوظ کرناinline fun <reified T> parse(): T
destructuringdata class کو الگ کرناval (name, age) = person
typealiasٹائپ عرفtypealias Orders = List<Order>
lateinitvar کی تاخیری ابتداءlateinit var adapter: Adapter
lazyval کی سست ابتداءval config by lazy { load() }
delegatedخصوصیات کا مختارvar x by Delegates.observable(0)

reified — ٹائپ سیف API کے لیے۔ lazy — تاخیری لوڈنگ کے لیے۔ delegated properties — خصوصیت کی منطق کو دوبارہ استعمال کرنے کے لیے۔ IT Sectr مؤثر Kotlin ڈویلپمنٹ کے لیے ان تمام خصوصیات میں مہارت حاصل کرنے کی تجویز کرتا ہے۔

Flow اور StateFlow

Flow — Kotlin میں سرد غیر متزامن ڈیٹا سٹریم۔ جمع کرنے والے کے مطالبے پر اقدار خارج کرتا ہے۔ StateFlow — ایک موجودہ قدر کے ساتھ گرم Flow۔ ViewModel میں UI State کے لیے استعمال۔ SharedFlow — واقعات کے لیے گرم Flow (ایک بار کے واقعات)۔ flowOf، asFlow — مجموعوں سے Flow بنانا۔ catch، retry، debounce — آپریٹرز۔ stateIn، shareIn — سرد Flow کو گرم میں تبدیل کرنا۔ IT Sectr UI State کے لیے StateFlow اور واقعات (Snackbar، نیویگیشن) کے لیے SharedFlow تجویز کرتا ہے۔

kotlin
class SearchViewModel : ViewModel() {
    private val _query = MutableStateFlow("")
    val suggestions: StateFlow<List<String>> = _query
        .debounce(300)
        .filter { it.length >= 2 }
        .flatMapLatest { repository.search(it) }
        .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())

    fun onQueryChanged(query: String) {
        _query.value = query
    }
}

سیریالائزیشن (kotlinx.serialization, Parcelize)

kotlinx.serialization — JSON سیریالائزیشن کے لیے Kotlin لائبریری۔ @Serializable — تشریح۔ @SerialName — حسب ضرورت فیلڈ نام۔ معاونت: JSON، CBOR، ProtoBuf۔ Parcelize — Android Parcelable کے لیے @Parcelize (دستی نفاذ کے بغیر)۔ Gson vs Moshi vs kotlinx: kotlinx.serialization — Kotlin-first، کمپائل محفوظ، reflection کے بغیر۔ Moshi — تشریحات + codegen۔ IT Sectr نئے پروجیکٹس کے لیے kotlinx.serialization اور موجودہ پروجیکٹس کے لیے Moshi تجویز کرتا ہے۔

kotlin
@Serializable
data class ApiResponse<T>(
    val success: Boolean,
    @SerialName("data") val data: T? = null,
    val error: String? = null
)

@Serializable
data class User(
    val id: Int,
    val name: String,
    val email: String
)

// ڈی سیریالائزیشن
val json = Json { ignoreUnknownKeys = true }
val response = json.decodeFromString<ApiResponse<List<User>>>(jsonString)
println("Users: ${response.data?.size ?: 0}")

اکثر پوچھے گئے سوالات

data class اور sealed class میں کیا فرق ہے؟

data class — ڈیٹا کے لیے (equals/hashCode/copy کی خودکار تخلیق)۔ sealed class — ٹائپ کے درجہ بندی کے لیے (when میں جانچ)۔ sealed interface — متعدد وراثت کے ساتھ وہی۔

Kotlin میں scope functions کیا ہیں؟

let, run, with, apply, also۔ سیاق (it vs this) اور واپسی کی قیمت (result vs context) میں فرق۔ let — null حفاظت، apply — کنفیگریشن، also — ضمنی اثرات۔

CoroutineScope کیا ہے اور کس قسم کی ہیں؟

CoroutineScope — coroutines کا دائرہ کار۔ lifecycleScope — Activity کے لیے، viewModelScope — ViewModel کے لیے۔ GlobalScope — تجویز نہیں کیا جاتا۔

Kotlin میں reified کیا ہے؟

reified — inline فنکشنز میں ٹائپ کا تحفظ۔ T::class اور is T کی اجازت دیتا ہے۔ صرف inline فنکشنز کے ساتھ کام کرتا ہے۔

Coroutine builders کیا ہیں: launch, async, runBlocking؟

launch — بغیر نتیجہ کے۔ async — نتیجے کے ساتھ (Deferred)۔ runBlocking — main/test کے لیے بلاک کرنے والا پل۔ withContext — Dispatcher تبدیل کرنا۔

خلاصہ

  • data class — ماڈلز کے لیے۔ sealed class — حالات کے لیے۔ object — سنگلٹن کے لیے۔
  • Scope functions: let (null-محفوظ)، apply (کنفیگریشن)، run (حسابات)، also (لاگنگ)۔
  • Coroutines: launch (fire-and-forget)، async (نتیجے کے ساتھ)، withContext (Dispatcher تبدیل کرنا)۔
  • viewModelScope — ViewModel کے لیے معیاری۔ lifecycleScope — Activity/Fragment کے لیے۔
  • reified — ٹائپ سیف inline فنکشنز۔ lateinit — DI، lazy — سست ابتداء۔
  • Extension functions — وراثت کے بغیر فعالیت شامل کریں۔
  • Dispatchers: Main (UI), IO (نیٹ ورک/ڈسک), Default (CPU)۔ صحیح کا انتخاب کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں