Sobes.tech
Middle

Kotlin proqramlaşdırma dili məlumat axınları ilə işləmək üçün hansı xüsusiyyətləri təqdim edir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin, asinxron və bloklamayan iş üçün daxili korutinaları (coroutines) dəstəkləyir və bu, əməliyyat sisteminin iplərinə nisbətən daha yüngül alternativ təqdim edir.

Korutinalar vasitəsilə məlumat axınları ilə işləmək xüsusiyyətləri:

  • Yüngüllük: Korutinalar, əməliyyat sisteminin iplərinə 1:1 bağlı deyil. Bir korutina əhəmiyyətli dərəcədə az resurs sərf edir.
  • Strukturlaşdırılmış konkurrentlik: Korutinaların yaradılması üçün hierarxik struktur (valideyn-uşaq) tapşırıqların ləğv edilməsini və səhvlərin idarə olunmasını sadələşdirir.
  • Dayandırma (Dayandırma funksiyaları): suspend açar sözü, funksiyanın icrasını dayandırmağa və sonra davam etdirməyə imkan verir.
  • Kanal (Channels): Məlumatların ötürülməsi vasitəsilə korutinalar arasında təhlükəsiz əlaqə təmin edir.
    // Kanal istifadəsi nümunəsi
    import kotlinx.coroutines.*
    import kotlinx.coroutines.channels.*
    
    fun main() = runBlocking {
        val channel = Channel<Int>()
        launch { // Göndərən korutina
            for (x in 1..5) channel.send(x * x)
            channel.close() // Kanalı bağla
        }
        // Qəbul edən korutina
        for (y in channel) {
            println(y)
        }
        println("Hazır!")
    }
    
  • Flow (Məlumat axınları): Soyuq, asinxron məlumat axınlarını təmsil edir və çoxsaylı dəyərlər yaymağa qadirdir. RxJava Observable-ə bənzəyir, lakin korutinalarla daha yaxşı inteqrasiya olunur.
    // Flow istifadəsi nümunəsi
    import kotlinx.coroutines.*
    import kotlinx.coroutines.flow.*
    
    fun main() = runBlocking {
        flow { // Flow yaradılması
            for (i in 1..3) {
                delay(100) // Asinxron işin simulyasiyası
                emit(i) // Dəyər yayımı
            }
        }.collect { value -> // Dəyərlərin toplanması
            println(value)
        }
    }
    
  • Dispatcherlər (Dispetçerlər): Korutinaların icra olunacağı ip hovuzlarını müəyyən edir.
    • Dispatchers.Default: Çox ağır hesablamalar üçün.
    • Dispatchers.IO: Giriş-çıxış əməliyyatları üçün.
    • Dispatchers.Main: UI yeniləmələri üçün (UI hadisə döngüsü olan platformalarda mövcuddur).
    • Dispatchers.Unconfined: Müəyyən bir ip ilə məhdudlaşmır.
  • Seçicilər (Select): Bir neçə asinxron əməliyyatın tamamlanmasını gözləməyə və ilk tamamlandığında əməliyyat həyata keçirməyə imkan verir.

Təbii ki, Kotlin-də ənənəvi Java ipleri (java.lang.Thread) ilə işləmək də mümkündür, lakin korutinalar çox hallarda asinxron və konkurrent məlumatların işlənməsi üçün üstün yanaşmadır.