Sobes.tech
Middle

Šta je funkcija 'suspend' u Kotlinu?

sobes.tech АИ

Одговор од АИ

Funkcija suspend je funkcija koja može biti suspendovana (suspend) i nastavljena (resume) kasnije. One su osnovni deo korutina u Kotlinu i koriste se za izvršavanje asinhronih operacija bez blokiranja niti.

Ključne karakteristike:

  • Može biti pozvana samo iz druge suspend funkcije ili iz konteksta korutine. Kompilator garantuje ovo ograničenje.
  • Ne blokira nit. Tokom izvršavanja asinhrone operacije (npr. mrežnog zahteva), suspend funkcija zaustavlja izvršenje korutine, oslobađajući nit za druge zadatke. Kada asinhrona operacija završi, korutina se nastavlja od mesta gde je zaustavljena.
  • Koristi se za strukturirani paralelizam. U kombinaciji sa funkcijama kao što su launch i async iz biblioteke kotlinx.coroutines, omogućava pisanje asinhronog koda u sekvencijalnom, lako čitljivom stilu.
  • Kompajler pretvara suspend funkcije u završne automate. Ovo omogućava da se stanje korutine sačuva između tačaka zaustavljanja.

Primer:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulacija asinhrone operacije (npr. mrežni zahtev)
    delay(1000) // tačke zaustavljanja
    return "Podaci učitani"
}

fun main() = runBlocking {
    println("Početak učitavanja...")
    val data = fetchData() // poziv suspend funkcije
    println(data)
    println("Učitavanje završeno")
}

Ovde, fetchData je suspend funkcija koja koristi delay (još jedna suspend funkcija) za simulaciju kašnjenja. delay je tačka zaustavljanja. runBlocking kreira opseg korutine za izvršenje main kao blokirajući nit, ali unutar nje fetchData se izvršava neblokirajuće.