Android üçün Kotlin: sintaksis əsasları və imkanlar

Müəllif: IT Sectr Dərc olunub: 2026-02-10 Oxuma vaxtı: 8 dəq

Kotlin — JetBrains tərəfindən yaradılmış, JVM-də işləyən və 2017-ci ildən Google tərəfindən Android inkişafı üçün rəsmi dəstəklənən statik tipli proqramlaşdırma dilidir. Kotlin Java ilə tam uyğunlaşır, yığcam sintaksisə və daxili null-təhlükəsizliyə malikdir. Kotlin Documentation — dil və standart kitabxana üçün tam bələdçi.

Əsas məqamlar

  • Kotlin — JetBrains tərəfindən yığcam sintaksis və null-təhlükəsizlik ilə statik tipli JVM dilidir
  • Null safety — kompilyator nullable (String?) və non-null (String) tiplərini fərqləndirir, NullPointerException-ı aradan qaldırır
  • Data classes — equals, hashCode, toString, copy və componentN-in avtomatik generasiyası
  • Extension functions — statik çağırışlar vasitəsilə varislik olmadan mövcud siniflərə metodların əlavə edilməsi
  • Coroutines — thread-ları bloklamadan suspend-funksiyalar vasitəsilə ardıcıl üslubda asinxron proqramlaşdırma

Kotlin nədir?

Kotlin — JetBrains şirkəti (IntelliJ IDEA-nın yaradıcısı) tərəfindən yaradılmış və 2016-cı ildə Apache 2.0 lisenziyası ilə buraxılmış statik tipli proqramlaşdırma dilidir. Kotlin JVM bayt-koduna, JavaScript-ə və nativ koda (Kotlin/Native vasitəsilə) kompilyasiya olunur. Əsas tətbiq sahəsi — Android inkişafı, server tətbiqləri və çoxplatformalı layihələrdir.

Google Kotlin-i Google I/O 2017-də Android inkişafının rəsmi dili elan etdi. Google məlumatlarına görə (Android Developer Blog, 2026), Google Play-də yeni layihələrin 85%-dən çoxu Kotlin istifadə edir. Dil həmçinin server inkişafında (Spring Boot, Ktor) və multiplatformalı layihələrdə (Kotlin Multiplatform Mobile) fəal şəkildə tətbiq olunur.

Kotlin Java ilə tam uyğunlaşır — bir layihə çərçivəsində Kotlin-dən Java kodunu və əksinə çağırmaq olar. Qurma alətləri (Gradle, Maven) hər iki dili dəstəkləyir ki, bu da inkişafda fasiləsiz Java-dan Kotlin-ə tədricən miqrasiya etməyə imkan verir.

Niyə Kotlin Android üçün Java-dan daha populyardır

Əsas səbəblər: yığcamlıq — Kotlin bir tapşırığı həll etmək üçün Java-dan orta hesabla 40% az kod sətri tələb edir. Null-təhlükəsizlik — kompilyator nullable tiplərin yoxlanılmadan istifadəsini qadağan edir. Funksional imkanlar — yüksək dərəcəli funksiyalar, lambdalar, extension functions və korutinlər kodu daha ifadəli və təhlükəsiz edir.

Sintaksisin əsasları

Əsas Kotlin sintaksisi yığcamlığı aşkarlıqla birləşdirir. Dəyişənlər val (immutable) və var (mutable) vasitəsilə elan edilir. Kompilyator type inference istifadə edir, lakin tipin açıq şəkildə göstərilməsi dəstəklənir. Funksiyalar fun açar sözü ilə elan edilir.

kotlin
package com.example.intro

// Sabitlər və dəyişənlər
val appName: String = "KotlinApp"  // dəyişməz
var version = 1.0  // dəyişən, tip çıxarılıb

// Expression body ilə funksiya
fun sum(a: Int, b: Int) = a + b

// String templates
fun greet(name: String) = "Salam, $name! Versiya ${appName}_$version"

// Default and named arguments
fun createUser(
    name: String,
    age: Int = 18,
    email: String? = null
)

When-ifadəsi Java-da switch-i əvəz edir və daha çevikdir: tiplərin yoxlanılması, diapazonlar, şərtlər və break olmadan budaqları dəstəkləyir. Kompilyator enum və sealed-sinflər üçün tam əhatəni yoxlayır. Smart casts is yoxlanışından sonra tipləri avtomatik çevirir ki, bu da açıq çevirmələri aradan qaldırır.

kotlin
fun analyzeValue(value: Any) = when (value) {
    is String -> "Uzunluğu ${value.length} olan sətir"  // smart cast
    is Int -> "Tam ədəd: $value"
    in 1..10 -> "1-10 diapazonunda ədəd"
    else -> "Naməlum tip"
}

Null-təhlükəsizlik və elvis-operatorlar

Null-təhlükəsizlik — Kotlin-in əsas xüsusiyyəti, NullPointerException-ı kompilyasiya səviyyəsində aradan qaldırır. Kotlin-də tiplər standart olaraq null ola bilməz. Null-a icazə vermək üçün tipə ? əlavə edin: String?. Kompilyator hər bir nullable dəyərin açıq şəkildə yoxlanılmasını tələb edir.

kotlin
// Nullable və non-null tiplər
val nonNull: String = "Həmişə non-null"
val nullable: String? = null  // icazə verilir

// Safe call — yalnız null deyilsə icra olunur
val length: Int? = nullable?.length

// Elvis operator — standart dəyər
val text: String = nullable ?: "Default text"

// Let — non-null dəyərlə blokun icrası
nullable?.let { value ->
    println("Dəyər: $value")
}

Safe call operator (?.) operatordan əvvəlki obyekt null olarsa null qaytarır, əks halda metodu/xassəni çağırır. Elvis operator (?:) sol tərəf null olduqda standart dəyər təmin edir. Not-null assertion (!!) dəyər null olarsa NullPointerException atır — yalnız dəyərin mövcudluğuna 100% əmin olduqda istifadə edin.

Platform tipləri (platform types) — çağırılan Java kodundan gələn Java tipləri, Kotlin-in nullable və ya non-null kimi qeyd edə bilmədiyi tiplərdir. Tip String! (nida işarəsi ilə) kimi göstərilir. İnkişaf etdirici Java kodu ilə işləyərkən null-təhlükəsizliyə özü cavabdehdir.

Data-sinflər və destrukturizasiya

Data-sinflər Kotlin-də avtomatik olaraq equals(), hashCode(), toString(), copy() və componentN() yaradır. Bu, Java modellərinin (POJO) boilerplate kodunu aradan qaldırır və kodu daha təmiz edir. data class elanı Java-da 20-30 sətir əvəzinə bir sətir tutur.

kotlin
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val age: Int? = null
)

// İstifadə
val user = User(1, "Anna", "anna@example.com")
val updatedUser = user.copy(age = 25)

// Destrukturizasiya
val (id, name) = user
println("İstifadəçi #$id: $name")

Destrukturizasiya data class-ı bir sətirdə dəyişənlərə parçalamağa imkan verir. Bu, cütlüklər, üçlüklər və digər mürəkkəb dəyərlərlə işləyərkən rahatdır. Destrukturizasiya data-sinflər, standart kolleksiyalar (List, Map) və operator fun componentN() olan istənilən siniflər üçün dəstəklənir.

Genişləndirmə funksiyaları

Extension functions — Kotlin-in varislik olmadan mövcud siniflərə yeni metodlar əlavə etmək mexanizmidir. Genişləndirmələr receiver-parametrli statik metodlara kompilyasiya olunur, buna görə varislik tələb olunmur və virtuallıq dəstəklənmir.

kotlin
// String üçün 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 üçün Generic extension
fun List<Int>.sumOfEvens(): Int {
    return this.filter { it % 2 == 0 }.sum()
}

// İstifadə
println("test@mail.com".isEmail())  // true

Genişləndirmələr Android SDK və kitabxanalarında geniş istifadə olunur. Məsələn, Android KTX-də Activity extensions — Activity, Fragment, View və digər siniflər üçün extension functions-dır. Genişləndirmələr faylda top-level funksiyalar və ya sinif üzvləri (member extensions) kimi elan edilə bilər.

Asinxron proqramlaşdırma üçün korutinlər

Coroutines — Kotlin-də ardıcıl üslubda bloklanmayan kod yazmağa imkan verən asinxron proqramlaşdırma mexanizmidir. Korutin thread-i bloklamadan suspend-funksiyada icranı dayandırır və əməliyyat bitdikdən sonra işi bərpa edir. Bu, RxJava callback zəncirləri və AsyncTask-ə alternativdir.

kotlin
import kotlinx.coroutines.*

// Suspend-funksiya — dayana bilər
suspend fun fetchUserData(userId: Int): User {
    // delay — suspend-funksiya, thread-i bloklamır
    delay(500)
    return User(userId, "User $userId", "user@example.com")
}

// Korutində işə salma
fun loadData() {
    CoroutineScope(Dispatchers.Main).launch {
        val user = fetchUserData(1)  // burada dayanma
        updateUI(user)  // Main-thread-də davam
    }
}

Dispatchers korutin üçün thread hovuzunu müəyyən edir: Dispatchers.Main (UI-thread), Dispatchers.IO (şəbəkə/disk əməliyyatları), Dispatchers.Default (CPU-intensiv tapşırıqlar). Structured concurrency scope bitdikdən sonra korutinin aktiv qalmayacağını təmin edir — bu, yaddaş sızmalarının qarşısını alır.

kotlin
// async/await vasitəsilə paralel işə salma
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-ya qarşı: müqayisə

Yeni Android layihəsi üçün Kotlin və Java arasında seçim — əsas memarlıq qərarıdır. Kotlin daha müasir sintaksis və daxili təhlükəsizlik mexanizmləri təklif edir, Java — daha geniş inkişaf etdirici hovuzu və yetkin kitabxanalar təklif edir.

Açıq çevirmə (Type) obj
XüsusiyyətKotlinJava
Null-təhlükəsizlikDaxili (nullable/non-null)Yoxdur (@Nullable annotasiyaları)
Kodun həcmiJava-ya nisbətən −40%Boilerplate (getters/setters)
Data-sinflərdata class (bir sətir)POJO Lombok ilə və ya əl ilə
AsinxronluqCoroutines (suspend/await)CompletableFuture, RxJava
Extension functionsDaxiliYalnız utility-siniflər vasitəsilə
Smart castsis yoxlanışından sonra
Geri uyğunluqJava ilə 100%

Performans Kotlin və Java müqayisə olunandır — hər ikisi JVM bayt-koduna kompilyasiya olunur. Kotlin bəzən korutinlərə və inlining-ə mikro-əlavə yük əlavə edir, lakin bu mobil tətbiqlər üçün əhəmiyyətsizdir. Google və JetBrains Kotlin-ə fəal sərmayə qoyur: Kotlin Multiplatform, Kotlin/Wasm və K2 kompilyatorunun performansının yaxşılaşdırılması.

Tez-tez verilən suallar

Kotlin Java-dan nə ilə fərqlənir?

Kotlin Java-dan 40% qısadır — daha az boilerplate. Kotlin null-təhlükəsizlik, data-sinflər, extension functions, korutinlər, smart casts, when-ifadələri əlavə edir. Java ilə tam uyğunluq: hər iki dil JVM-də işləyir və bir layihədə konfliktsiz istifadə edilə bilər.

Kotlin-də null-təhlükəsizlik necə işləyir?

Tiplər standart olaraq non-null-dur. Nullable üçün ? istifadə edin: String?. Kompilyator nullable dəyərə birbaşa müraciəti qadağan edir. Safe call (?.) null receiver olduqda null qaytarır. Elvis operator (?:) standart dəyər təyin edir. !! — mümkün istisna ilə məcburi çıxarma.

Kotlin-də korutinlər (coroutines) nədir?

Korutinlər — yüngül çəkili thread-lardır, asinxron kodu ardıcıl yazmağa imkan verir. suspend-funksiyalar thread-i bloklamadan dayanır. launch və async CoroutineScope-də korutinləri işə salır. Dispatchers.IO şəbəkə sorğuları üçün, Dispatchers.Main UI yeniləmələri üçün.

Kotlin-də data-sinflər nədir?

data class avtomatik olaraq equals(), hashCode(), toString(), copy() və componentN() yaradır. Nümunə: data class User(val name: String, val age: Int). val (name, age) = user vasitəsilə destrukturizasiya. Java 14+-da record-un analoqu, lakin əlavə copy() metodu ilə.

Genişləndirmə funksiyaları (extension functions) necə işləyir?

Extension functions mövcud siniflərə metodlar əlavə edir: fun String.isEmail(): Boolean. Kompilyator onları receiver-parametrli statik çağırışlarla əvəz edir. Varislik tələb olunmur. Genişləndirmələr Android KTX-də geniş istifadə olunur: view.showToast(), activity.viewModels().

Nəticələr

  • Kotlin — JetBrains tərəfindən statik tipli JVM dili, 2017-ci ildən Android-in rəsmi dili
  • Null safety — nullable/non-null tiplər, safe call (?.), elvis (??), nullable ilə təhlükəsiz iş üçün let-bloklar
  • Data classes — equals, hashCode, toString, copy və destrukturizasiyanın avtomatik generasiyası
  • Extension functions — varislik olmadan istənilən siniflərə metodların əlavə edilməsi, statik çağırışlara kompilyasiya
  • Coroutines — suspend-funksiyalar, launch/async və Dispatchers ilə ardıcıl üslubda asinxron kod
  • Java ilə müqayisə — −40% kod, null-təhlükəsizlik, smart casts, when-ifadələri və Java ilə 100% uyğunluq
  • Kotlin Multiplatform — Kotlin təkcə Android üçün deyil, həm də iOS (KMM) və serverlər (Ktor, Spring) üçün istifadə olunur

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun