Mobil ishlanmada Kotlin xususiyatlari: bu nima, qanday konstruksiyalar va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-06-29 O'qish vaqti: 11 daq

Kotlin Android ishlanmasi uchun asosiy tildir. Google Android Docs (2025) ga ko‘ra, yangi Android loyihalarining 95% dan ortig‘i Kotlindan foydalanadi. Kotlin xususiyatlarini tushunish — data class, sealed class, koroutinlar va scope functions — Android dasturchisi uchun majburiy talabdir.

Asosiy fikrlar

  • data class — equals/hashCode/toString/copy/componentN avtomatik yaratish. Ma‘lumot modellari uchun. sealed class — when tekshiruvi bilan cheklangan tip iyerarxiyasi.
  • Scope functions: let, run, with, apply, also. Kontekst (it vs this) va qaytariladigan qiymatga ko‘ra farqlanadi.
  • Koroutinlar: launch (fire-and-forget), async (natija bilan), runBlocking (ko‘prik), withContext (Dispatcherni o‘zgartirish).
  • lifecycleScope va viewModelScope — qo‘lda bekor qilmasdan Lifecycle-aware koroutinlar.
  • reified — inline funksiyalarda turni saqlash. lateinit/lazy — kechiktirilgan boshlash.

Sinflar (data class, sealed class, object, companion object)

Kotlin Java-dan sinf tushunchalarini kengaytiradi. data class, sealed class, object va companion object — Java-da mavjud bo‘lmagan yoki boshqacha tatbiq qilingan konstruksiyalar.

data class vs sealed class

data class — equals(), hashCode(), toString(), copy() va componentN() ni avtomatik yaratadigan sinf. Ma‘lumot modellari (DTO, Entity) uchun ideal. Talablar: asosiy konstruktorda kamida bitta parametr, val/var, open/sealed/inner bo‘la olmaydi. sealed class — cheklangan pastki sinf iyerarxiyasiga ega sinf. Barcha pastki sinflar kompilatsiya vaqtida ma‘lum va bir faylda e‘lon qilinadi. sealed class bilan when ifodasi else tarmog‘ini talab qilmaydi. sealed interface (Kotlin 1.9+) — sealed class bilan bir xil, lekin ko‘p merosga ruxsat beradi. object — singleton, object kalit so‘zi bilan (class emas) e‘lon qilinadi. Thread-safe dangasa boshlash. companion object — sinfning statik a‘zolari. Nomi bor (standart Companion). Interfeyslarni tatbiq qilishi va extension functionsga ega bo‘lishi mumkin.

Tip Tavsif Foydalanish
data classequals, hashCode, toString, copy avtomatik yaratishMa‘lumot modellari, DTO, Entity
sealed classCheklangan iyerarxiya, when tekshiruviHolatlar, Natija, UI State
sealed interfacesealed class + ko‘p merosVoqealar, Harakatlar (Kotlin 1.9+)
objectSingleton (deklarativ)Factory, Utility, Konstantalar
companion objectSinfning statik a‘zolariFactory Method, statik konstantalar
enum classKonstantalar bilan sanashRuxsat etilgan to‘plam bilan holatlar

data class — 90% modellar uchun. sealed class — UI State va Natija uchun. object — singletonlar uchun. IT Sectr barcha ekran holatlari (Loading, Success, Error) uchun sealed class tavsiya qiladi.

Amalda Sealed class

Sealed class — holatlarni modellashtirish uchun kuchli vosita. Misol: UiState<T> pastki sinflari Loading, Success(data: T), Error(message: String) bilan. when ifodasi barcha holatlarning ishlanishini kafolatlaydi. Sealed interface — ko‘p tatbiq talab qilinadigan voqealar va harakatlar uchun. Value class (Kotlin 1.5+) — overheadsiz bitta qiymat uchun o‘rovchi. Tip-xavfsiz identifikatorlar uchun ishlatiladi: @JvmInline value class UserId(val id: String).

Funksiyalar (extension, inline, higher-order, scope functions)

Extension Function — merossiz mavjud sinfga metod qo‘shish. fun String.isEmail(): Boolean. Extension Property — xususiyatlar uchun xuddi shunday (backing fieldsiz). Inline Function — funksiya tanasini chaqiruv joyiga joylashtirish — chaqiruv overheadisiz. Lambda bilan higher-order funksiyalar uchun ishlatiladi. Higher-Order Function — boshqa funksiyani qabul qiladigan yoki qaytaradigan funksiya. Scope Functions — obyekt konteksti bilan ishlash uchun besh funksiya: let, run, with, apply, also.

Scope Functions

let — kontekst it, lambda natijasini qaytaradi. Null-safe chaqiruvlar uchun ishlatiladi (?.let {}). apply — kontekst this, kontekstni qaytaradi. Obyekt konfiguratsiyasi uchun. run — kontekst this, lambda natijasini qaytaradi. Kontekst bilan hisoblashlar uchun. also — kontekst it, kontekstni qaytaradi. Yon ta‘sirlar uchun (loglash). with — extension emas, kontekst this, lambda natijasini qaytaradi. Obyekt ustida operatsiyalar guruhi uchun. Lambda — anonim funksiya. Destructuring Declaration — data classni o‘zgaruvchilarga ajratish: val (name, age) = person.

Inline + reified

Inline function reified bilan — JVMda generic turni saqlashning yagona usuli. Foydalanish: tip-xavfsiz builderlar (Gson.fromJson<T>()), turni tekshirish (is T), sinfni olish (T::class). Crossinline va Noinline — inline funksiyalarda lambda parametrlari uchun modifikatorlar. crossinline — non-local returnni taqiqlaydi, noinline — ma‘lum lambdaning inliningini taqiqlaydi. IT Sectr faqat turlar bilan ishlaganda inline + reified tavsiya qiladi; oddiy higher-order funksiyalar uchun inline bayt kod hajmini oshirishi mumkin.

Koroutinlar (Coroutine Builder, Dispatchers, Scope)

Koroutinlar — asinxron dasturlash uchun yengil iplar. Ipni bloklamaydi — to‘xtatadi (suspend). suspend function — ipni bloklamasdan to‘xtatilishi mumkin bo‘lgan funksiya. Faqat koroutin yoki boshqa suspend funksiyadan chaqirilishi mumkin.

CoroutineScope

CoroutineScope — koroutinlar uchun doira. CoroutineContext (Job + Dispatcher) ni o‘z ichiga oladi. lifecycleScope — Activity/Fragment uchun (Lifecycle-aware). viewModelScope — ViewModel uchun (onCleared() da avtomatik bekor qilish). GlobalScope — global doira (ishlab chiqarishda ishlatmang — xotira oqishi). Dispatchers: Dispatchers.Main (UI), Dispatchers.IO (tarmoq/disk), Dispatchers.Default (CPU-intensive), Dispatchers.Unconfined (tavsiya etilmaydi). launch — koroutin boshlaydi: Job. async — natija bilan boshlaydi: Deferred<T>. runBlocking — bloklovchi ko‘prik. withContext — suspend funksiyasi ichida Dispatcherni o‘zgartiradi.

kotlin
// Koroutin misoli: ViewModelda ma‘lumot yuklash
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 bilan parallel so‘rovlar
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 — ViewModelda standart koroutin boshlash. withContext(Dispatchers.IO) — tarmoq so‘rovi uchun IO ipiga o‘tish. Dispatchers koroutin qaysi ip havzasida bajarilishini aniqlaydi. IT Sectr ViewModel uchun viewModelScope va Activity/Fragment uchun lifecycleScope tavsiya qiladi.

Ilg‘or imkoniyatlar (reified, destructuring, lateinit/lazy)

reified — inline funksiyalarda tip modifikatori. Turni ishlatishga imkon beradi: T::class, is T, as T. reified bo‘lmasa, JVMda generics o‘chiriladi (type erasure). inline fun + reified — tip-xavfsiz APIlar uchun kuchli kombinatsiya. Destructuring Declaration — val (x, y) = point. data class va componentN() li turlar uchun ishlaydi. typealias — tip taxallusi: typealias Callback = (String) -> Unit. lateinit — varnı kechiktirilgan boshlash (dependency injection uchun). Thread-xavfsiz emas. lazy — valni dangasa boshlash (standart thread-xavfsiz). lazy(LazyThreadSafetyMode.NONE) — sinxronizatsiyasiz. Extension function va Extension property — merossiz funksionallik qo‘shish. Kotlin bu extension functions yordamchi vazifalarning 90% ni hal qiladigan tildir.

Delegatsiya qilingan xususiyatlar

Delegated Properties — getter/setterni boshqa obyektga topshirish. Standart delegatlar: lazy, observable, vetoable, map. getValue/setValue operatorlari orqali maxsus delegat. by — delegatsiya kalit so‘zi: val name by lazy { loadName() }. Delegatsiya qilingan xususiyatlar ViewModel delegatlari (by viewModels()) uchun asosdir. IT Sectr kechiktirilgan boshlash uchun lazy va o‘zgarishlarni kuzatish uchun Delegates.observable tavsiya qiladi.

Imkoniyat Tavsif Misol
reifiedInline da generic turni saqlashinline fun <reified T> parse(): T
destructuringData classni ajratishval (name, age) = person
typealiasTip taxallusitypealias Orders = List<Order>
lateinitVarnı kechiktirilgan boshlashlateinit var adapter: Adapter
lazyValni dangasa boshlashval config by lazy { load() }
delegatedXususiyatlar delegatsiyasivar x by Delegates.observable(0)

reified — tip-xavfsiz APIlar uchun. lazy — kechiktirilgan yuklash uchun. delegated properties — xususiyat mantiqini qayta ishlatish uchun. IT Sectr samarali Kotlin ishlanmasi uchun barcha imkoniyatlarni o‘zlashtirishni tavsiya qiladi.

Flow va StateFlow

Flow — Kotlinda sovuq asinxron ma‘lumot oqimi. Kollektor talabiga binoan qiymatlarni chiqaradi. StateFlow — yagona joriy qiymatga ega issiq Flow. ViewModelda UI State uchun ishlatiladi. SharedFlow — voqealar uchun issiq Flow (bir martalik voqealar). flowOf, asFlow — kolleksiyalardan Flow yaratish. catch, retry, debounce — operatorlar. stateIn, shareIn — sovuq Flowni issiqga aylantirish. IT Sectr UI State uchun StateFlow va voqealar (Snackbar, navigatsiya) uchun SharedFlow tavsiya qiladi.

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
    }
}

Serializatsiya (kotlinx.serialization, Parcelize)

kotlinx.serialization — JSON serializatsiyasi uchun Kotlin kutubxonasi. @Serializable — annotatsiya. @SerialName — maxsus maydon nomi. Qo‘llab-quvvatlaydi: JSON, CBOR, ProtoBuf. Parcelize — Android Parcelable uchun @Parcelize (qo‘lda tatbiq qilmasdan). Gson vs Moshi vs kotlinx: kotlinx.serialization — Kotlin-first, kompilatsiya-xavfsiz, reflectionsiz. Moshi — annotatsiyalar + codegen. IT Sectr yangi loyihalar uchun kotlinx.serialization va mavjud loyihalar uchun Moshi tavsiya qiladi.

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
)

// Deserializatsiya
val json = Json { ignoreUnknownKeys = true }
val response = json.decodeFromString<ApiResponse<List<User>>>(jsonString)
println("Users: ${response.data?.size ?: 0}")

Tez-tez beriladigan savollar

data class va sealed class o‘rtasidagi farq nima?

data class — ma‘lumotlar uchun (equals/hashCode/copy avtomatik yaratish). sealed class — tip iyerarxiyasi uchun (when da tekshirish). sealed interface — ko‘p meros bilan bir xil.

Kotlinda scope functions nima?

let, run, with, apply, also. Kontekst (it vs this) va qaytariladigan qiymat (result vs context) bilan farqlanadi. let — null xavfsizligi, apply — konfiguratsiya, also — yon ta‘sirlar.

CoroutineScope nima va qanday turlari bor?

CoroutineScope — koroutinlar doirasi. lifecycleScope — Activity uchun, viewModelScope — ViewModel uchun. GlobalScope — tavsiya etilmaydi.

Kotlinda reified nima?

reified — inline funksiyalarda turni saqlash. T::class va is T ga ruxsat beradi. Faqat inline funksiyalar bilan ishlaydi.

Coroutine builderlar nima: launch, async, runBlocking?

launch — natijasiz. async — natija bilan (Deferred). runBlocking — main/test uchun bloklovchi ko‘prik. withContext — Dispatcherni o‘zgartirish.

Xulosa

  • data class — modellar uchun. sealed class — holatlar uchun. object — singletonlar uchun.
  • Scope functions: let (null-xavfsiz), apply (konfiguratsiya), run (hisoblashlar), also (loglash).
  • Koroutinlar: launch (fire-and-forget), async (natija bilan), withContext (Dispatcher o‘zgartirish).
  • viewModelScope — ViewModel uchun standart. lifecycleScope — Activity/Fragment uchun.
  • reified — tip-xavfsiz inline funksiyalar. lateinit — DI, lazy — dangasa boshlash.
  • Extension functions — merossiz funksionallik qo‘shing.
  • Dispatchers: Main (UI), IO (tarmoq/disk), Default (CPU). To‘g‘risini tanlang.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish