Kotlin — JetBrains tomonidan yaratilgan, JVM da ishlaydigan va 2017 yildan boshlab Google tomonidan Android-ishlanmasi uchun rasman qo'llab-quvvatlanadigan statik tipli dasturlash tilidir. Kotlin Java bilan to'liq mos keladi, ixcham sintaksis va o'rnatilgan null-xavfsizlikka ega. Kotlin Documentation — til va standart kutubxona bo'yicha to'liq qo'llanma.
Asosiy ma'lumotlar
Kotlin — JetBrains kompaniyasi (IntelliJ IDEA yaratuvchisi) tomonidan yaratilgan va 2016 yilda Apache 2.0 litsenziyasi ostida chiqarilgan statik tipli dasturlash tilidir. Kotlin JVM bayt-kodiga, JavaScript ga va native kodga (Kotlin/Native orqali) kompilyatsiya qilinadi. Asosiy qo'llanish sohasi — Android-ishlanmasi, server ilovalari va kross-platforma loyihalaridir.
Google Kotlin ni Google I/O 2017 da Android-ishlanmasining rasmiy tili deb e'lon qildi. Google ma'lumotlariga ko'ra (Android Developer Blog, 2026), Google Play dagi yangi loyihalarning 85% dan ortig'i Kotlin dan foydalanadi. Til shuningdek server-ishlanmasida (Spring Boot, Ktor) va multiplatforma loyihalarida (Kotlin Multiplatform Mobile) faol qo'llaniladi.
Kotlin Java bilan to'liq mos keladi — bitta loyiha doirasida Kotlin dan Java kodini va aksincha chaqirish mumkin. Qurilish vositalari (Gradle, Maven) ikkala tilni qo'llab-quvvatlaydi, bu esa rivojlanishda to'xtovsiz Java dan Kotlin ga bosqichma-bosqich migratsiya qilish imkonini beradi.
Asosiy sabablar: ixchamlik — Kotlin bitta vazifani hal qilish uchun Java dan o'rtacha 40% kam kod satrini talab qiladi. Null-xavfsizlik — kompilyator nullable turlarni tekshirilmasdan ishlatishni taqiqlaydi. Funksional imkoniyatlar — yuqori darajali funksiyalar, lambdalar, extension functions va korutinlar kodni yanada ifodali va xavfsiz qiladi.
Asosiy Kotlin sintaksisi ixchamlikni aniqlik bilan birlashtiradi. O'zgaruvchilar val (immutable) va var (mutable) orqali e'lon qilinadi. Kompilyator type inference dan foydalanadi, lekin turni aniq ko'rsatish ham qo'llab-quvvatlanadi. Funksiyalar fun kalit so'zi bilan e'lon qilinadi.
package com.example.intro
// Konstantalar va o'zgaruvchilar
val appName: String = "KotlinApp" // o'zgarmas
var version = 1.0 // o'zgaruvchan, tur chiqarilgan
// Expression body bilan funksiya
fun sum(a: Int, b: Int) = a + b
// String templates
fun greet(name: String) = "Salom, $name! Versiya ${appName}_$version"
// Default and named arguments
fun createUser(
name: String,
age: Int = 18,
email: String? = null
)When-ifodasi Java dagi switch ni almashtiradi va yanada moslashuvchan: turlarni tekshirish, diapazonlar, shartlar va breaksiz tarmoqlarni qo'llab-quvvatlaydi. Kompilyator enum va sealed-sinflar uchun to'liq qamrab olishni tekshiradi. Smart casts is tekshiruvidan keyin turlarni avtomatik o'zgartiradi, bu aniq castlarni bartaraf qiladi.
fun analyzeValue(value: Any) = when (value) {
is String -> "Uzunligi ${value.length} bo'lgan satr" // smart cast
is Int -> "Butun son: $value"
in 1..10 -> "1-10 diapazonidagi son"
else -> "Noma'lum tur"
}Null-xavfsizlik — Kotlin ning asosiy xususiyati, NullPointerException ni kompilyatsiya darajasida bartaraf qiladi. Kotlin da turlar standart bo'yicha null bo'la olmaydi. Null ga ruxsat berish uchun turga ? qo'shing: String?. Kompilyator har bir nullable qiymatni aniq tekshirishni talab qiladi.
// Nullable va non-null turlar
val nonNull: String = "Har doim non-null"
val nullable: String? = null // ruxsat berilgan
// Safe call — faqat null bo'lmasa bajariladi
val length: Int? = nullable?.length
// Elvis operator — standart qiymat
val text: String = nullable ?: "Default text"
// Let — non-null qiymat bilan blokni bajarish
nullable?.let { value ->
println("Qiymat: $value")
}Safe call operatori (?.) operatordan oldingi ob'ekt null bo'lsa null qaytaradi va aks holda metod/xususiyatni chaqiradi. Elvis operatori (?:) chap tomon null bo'lganda standart qiymatni ta'minlaydi. Not-null assertion (!!) qiymat null bo'lsa NullPointerException chiqaradi — faqat qiymat mavjudligiga 100% ishonchingiz komil bo'lganda foydalaning.
Platforma turlari (platform types) — chaqirilayotgan Java kodidan keladigan Java turlari, Kotlin ularni nullable yoki non-null deb belgilay olmaydi. Tur String! (undov belgisi bilan) ko'rinishida namoyon bo'ladi. Dasturchi Java kodi bilan ishlashda null-xavfsizlik uchun o'zi javobgardir.
Data-sinflar Kotlin da avtomatik ravishda equals(), hashCode(), toString(), copy() va componentN() ni yaratadi. Bu Java modellarining (POJO) boilerplate kodini bartaraf qiladi va kodni tozaroq qiladi. data class e'loni Java dagi 20-30 satr o'rniga bir satrni egallaydi.
data class User(
val id: Long,
val name: String,
val email: String,
val age: Int? = null
)
// Ishlatish
val user = User(1, "Anna", "anna@example.com")
val updatedUser = user.copy(age = 25)
// Destrukturizatsiya
val (id, name) = user
println("Foydalanuvchi #$id: $name")Destrukturizatsiya data class ni bir satrda o'zgaruvchilarga ajratish imkonini beradi. Bu juftliklar, uchliklar va boshqa murakkab qiymatlar bilan ishlashda qulay. Destrukturizatsiya data-sinflar, standart kolleksiyalar (List, Map) va operator fun componentN() bo'lgan har qanday sinflar uchun qo'llab-quvvatlanadi.
Extension functions — Kotlin ning merosxo'rliksiz mavjud sinflarga yangi metodlarni qo'shish mexanizmi. Kengaytmalar receiver-parametrli statik metodlarga kompilyatsiya qilinadi, shuning uchun merosxo'rlik talab qilinmaydi va virtualik qo'llab-quvvatlanmaydi.
// String uchun Extension function
fun String.isEmail(): Boolean {
return this.contains("@") && this.contains(".")
}
// Extension property
val String.isPhoneNumber: Boolean
get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))
// Kolleksiyalar uchun Generic extension
fun List<Int>.sumOfEvens(): Int {
return this.filter { it % 2 == 0 }.sum()
}
// Ishlatish
println("test@mail.com".isEmail()) // trueKengaytmalar Android SDK va kutubxonalarida keng qo'llaniladi. Masalan, Android KTX dagi Activity extensions — Activity, Fragment, View va boshqa sinflar uchun extension functions dir. Kengaytmalar faylda top-level funksiyalar yoki sinf a'zolari (member extensions) sifatida e'lon qilinishi mumkin.
Coroutines — Kotlin da ketma-ket uslubda bloklanmaydigan kod yozish imkonini beruvchi asinxron dasturlash mexanizmi. Korutin thread ni bloklamasdan suspend-funksiyada bajarilishni to'xtatadi va operatsiya tugagandan keyin ishni tiklaydi. Bu RxJava callback zanjirlari va AsyncTask ga alternativadir.
import kotlinx.coroutines.*
// Suspend-funksiya — to'xtashi mumkin
suspend fun fetchUserData(userId: Int): User {
// delay — suspend-funksiya, threadni bloklamaydi
delay(500)
return User(userId, "User $userId", "user@example.com")
}
// Korutinda ishga tushirish
fun loadData() {
CoroutineScope(Dispatchers.Main).launch {
val user = fetchUserData(1) // bu yerda to'xtash
updateUI(user) // Main-thread da davom etish
}
}Dispatchers korutin uchun thread hovuzini belgilaydi: Dispatchers.Main (UI-thread), Dispatchers.IO (tarmoq/disk operatsiyalari), Dispatchers.Default (CPU-intensiv vazifalar). Structured concurrency scope tugagandan keyin korutinning faol qolmasligini kafolatlaydi — bu xotira oqishining oldini oladi.
// async/await orqali parallel ishga tushirish
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())
}Yangi Android loyihasi uchun Kotlin va Java o'rtasida tanlov — fundamental arxitektura qaroridir. Kotlin zamonaviyroq sintaksis va o'rnatilgan xavfsizlik mexanizmlarini taklif qiladi, Java — kengroq dasturchilar hovuzi va yetuk kutubxonalarni taklif qiladi.
| Xususiyat | Kotlin | Java |
|---|---|---|
| Null-xavfsizlik | O'rnatilgan (nullable/non-null) | Yo'q (@Nullable annotatsiyalari) |
| Kod hajmi | Java ga nisbatan −40% | Boilerplate (getters/setters) |
| Data-sinflar | data class (bir satr) | POJO Lombok bilan yoki qo'lda |
| Asinxronlik | Coroutines (suspend/await) | CompletableFuture, RxJava |
| Extension functions | O'rnatilgan | Faqat utility-sinflar orqali |
| Smart casts | is tekshiruvidan keyin | Aniq cast (Type) obj |
| Orqaga moslik | Java bilan 100% | — |
Unumdorlik Kotlin va Java taqqoslanadigan — ikkalasi ham JVM bayt-kodiga kompilyatsiya qilinadi. Kotlin ba'zan korutinlar va inlining ga mikro-qo'shimcha yuk qo'shadi, ammo bu mobil ilovalar uchun ahamiyatsiz. Google va JetBrains Kotlin ga faol sarmoya kiritmoqda: Kotlin Multiplatform, Kotlin/Wasm va K2 kompilyatorining unumdorligini yaxshilash.
Tez-tez beriladigan savollar
Kotlin Java dan 40% qisqaroq — kamroq boilerplate. Kotlin null-xavfsizlik, data-sinflar, extension functions, korutinlar, smart casts, when-ifodalarini qo'shadi. Java bilan to'liq moslik: ikkala til JVM da ishlaydi va bir loyihada ziddiyatsiz ishlatilishi mumkin.
Turlar standart bo'yicha non-null. Nullable uchun ? ishlating: String?. Kompilyator nullable qiymatga to'g'ridan-to'g'ri murojaatni taqiqlaydi. Safe call (?.) null receiver da null qaytaradi. Elvis operatori (?:) standart qiymatni belgilaydi. !! — mumkin bo'lgan istisno bilan majburiy chiqarish.
Korutinlar — engil vaznli threadlar, asinxron kodni ketma-ket yozish imkonini beradi. suspend-funksiyalar thread ni bloklamasdan to'xtaydi. launch va async CoroutineScope da korutinlarni ishga tushiradi. Dispatchers.IO tarmoq so'rovlari uchun, Dispatchers.Main UI yangilanishlari uchun.
data class avtomatik ravishda equals(), hashCode(), toString(), copy() va componentN() yaratadi. Misol: data class User(val name: String, val age: Int). val (name, age) = user orqali destrukturizatsiya. Java 14+ dagi record ning analogi, lekin qo'shimcha copy() metodi bilan.
Extension functions mavjud sinflarga metodlarni qo'shadi: fun String.isEmail(): Boolean. Kompilyator ularni receiver-parametrli statik chaqiruvlar bilan almashtiradi. Merosxo'rlik talab qilinmaydi. Kengaytmalar Android KTX da keng qo'llaniladi: view.showToast(), activity.viewModels().
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.