Android uchun Kotlin: sintaksis asoslari va imkoniyatlar

Muallif: IT Sectr Nashr etilgan: 2026-02-10 O'qish vaqti: 8 daq

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 dan ixcham sintaksis va null-xavfsizlikka ega statik tipli JVM tili
  • Null safety — kompilyator nullable (String?) va non-null (String) turlarini farqlaydi, NullPointerException ni bartaraf qiladi
  • Data classes — equals, hashCode, toString, copy va componentN ning avtomatik generatsiyasi
  • Extension functions — statik chaqiruvlar orqali merosxo'rliksiz mavjud sinflarga metodlarni qo'shish
  • Coroutines — threadlarni bloklamasdan suspend-funksiyalar orqali ketma-ket uslubda asinxron dasturlash

Kotlin nima?

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.

Nega Kotlin Android uchun Java dan mashhurroq

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.

Sintaksis asoslari

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.

kotlin
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.

kotlin
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 va elvis-operatorlar

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.

kotlin
// 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 va destrukturizatsiya

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.

kotlin
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.

Kengaytma funksiyalari

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.

kotlin
// 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())  // true

Kengaytmalar 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.

Asinxron dasturlash uchun korutinlar

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.

kotlin
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.

kotlin
// 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())
}

Kotlin Java ga qarshi: taqqoslash

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.

XususiyatKotlinJava
Null-xavfsizlikO'rnatilgan (nullable/non-null)Yo'q (@Nullable annotatsiyalari)
Kod hajmiJava ga nisbatan −40%Boilerplate (getters/setters)
Data-sinflardata class (bir satr)POJO Lombok bilan yoki qo'lda
AsinxronlikCoroutines (suspend/await)CompletableFuture, RxJava
Extension functionsO'rnatilganFaqat utility-sinflar orqali
Smart castsis tekshiruvidan keyinAniq cast (Type) obj
Orqaga moslikJava 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 nima bilan farq qiladi?

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.

Kotlin da null-xavfsizlik qanday ishlaydi?

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.

Kotlin da korutinlar (coroutines) nima?

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.

Kotlin da data-sinflar nima?

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.

Kengaytma funksiyalari (extension functions) qanday ishlaydi?

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

  • Kotlin — JetBrains dan statik tipli JVM tili, 2017 yildan Android ning rasmiy tili
  • Null safety — nullable/non-null turlar, safe call (?.), elvis (??), nullable bilan xavfsiz ishlash uchun let-bloklar
  • Data classes — equals, hashCode, toString, copy va destrukturizatsiyaning avtomatik generatsiyasi
  • Extension functions — merosxo'rliksiz istalgan sinflarga metodlarni qo'shish, statik chaqiruvlarga kompilyatsiya
  • Coroutines — suspend-funksiyalar, launch/async va Dispatchers bilan ketma-ket uslubda asinxron kod
  • Java bilan taqqoslash — −40% kod, null-xavfsizlik, smart casts, when-ifodalari va Java bilan 100% moslik
  • Kotlin Multiplatform — Kotlin nafaqat Android uchun, balki iOS (KMM) va serverlar (Ktor, Spring) uchun ham ishlatiladi

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

Shuningdek o'qing