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 ş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.
Ə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.
Ə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.
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.
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 — 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.
// 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 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.
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.
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.
// 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()) // trueGeniş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.
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.
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.
// 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())
}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.
| Xüsusiyyət | Kotlin | Java |
|---|---|---|
| Null-təhlükəsizlik | Daxili (nullable/non-null) | Yoxdur (@Nullable annotasiyaları) |
| Kodun həcmi | Java-ya nisbətən −40% | Boilerplate (getters/setters) |
| Data-sinflər | data class (bir sətir) | POJO Lombok ilə və ya əl ilə |
| Asinxronluq | Coroutines (suspend/await) | CompletableFuture, RxJava |
| Extension functions | Daxili | Yalnız utility-siniflər vasitəsilə |
| Smart casts | is yoxlanışından sonra | |
| Geri uyğunluq | Java 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 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.
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.
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.
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ə.
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
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.
Həm də oxuyun