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
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 — 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 class | equals, hashCode, toString, copy avtomatik yaratish | Ma‘lumot modellari, DTO, Entity |
| sealed class | Cheklangan iyerarxiya, when tekshiruvi | Holatlar, Natija, UI State |
| sealed interface | sealed class + ko‘p meros | Voqealar, Harakatlar (Kotlin 1.9+) |
| object | Singleton (deklarativ) | Factory, Utility, Konstantalar |
| companion object | Sinfning statik a‘zolari | Factory Method, statik konstantalar |
| enum class | Konstantalar bilan sanash | Ruxsat 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.
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).
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.
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 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 — 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 — 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.
// 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.
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.
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 |
|---|---|---|
| reified | Inline da generic turni saqlash | inline fun <reified T> parse(): T |
| destructuring | Data classni ajratish | val (name, age) = person |
| typealias | Tip taxallusi | typealias Orders = List<Order> |
| lateinit | Varnı kechiktirilgan boshlash | lateinit var adapter: Adapter |
| lazy | Valni dangasa boshlash | val config by lazy { load() } |
| delegated | Xususiyatlar delegatsiyasi | var 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 — 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.
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 — 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.
@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 — ma‘lumotlar uchun (equals/hashCode/copy avtomatik yaratish). sealed class — tip iyerarxiyasi uchun (when da tekshirish). sealed interface — ko‘p meros bilan bir xil.
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 — koroutinlar doirasi. lifecycleScope — Activity uchun, viewModelScope — ViewModel uchun. GlobalScope — tavsiya etilmaydi.
reified — inline funksiyalarda turni saqlash. T::class va is T ga ruxsat beradi. Faqat inline funksiyalar bilan ishlaydi.
launch — natijasiz. async — natija bilan (Deferred). runBlocking — main/test uchun bloklovchi ko‘prik. withContext — Dispatcherni o‘zgartirish.
Xulosa
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.