Sobes.tech
Middle

Co je to funkce 'suspend' v Kotlinu?

sobes.tech AI

Odpověď od AI

Funkce suspend je funkce, kterou lze pozastavit (suspend) a později znovu obnovit (resume). Jsou základní součástí korutin v Kotlinu a slouží k provádění asynchronních operací bez blokování vlákna.

Klíčové vlastnosti:

  • Může být volána pouze z jiné suspend funkce nebo z kontextu korutiny. Kompilátor zajišťuje toto omezení.
  • Neblokuje vlákno. Při provádění asynchronní operace (například síťového požadavku) funkce suspend pozastaví provádění korutiny, uvolní vlákno pro jiné úkoly. Když je asynchronní operace dokončena, korutina se obnoví tam, kde byla pozastavena.
  • Používá se pro strukturovanou paralelitu. Ve spojení s funkcemi jako launch a async z knihovny kotlinx.coroutines umožňuje psát asynchronní kód v sekvenčním, snadno čitelném stylu.
  • Kompilátor převádí suspend funkce na konečné automaty. To umožňuje uchovávat stav korutiny mezi body pozastavení.

Příklad:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulace asynchronní operace (například síťový požadavek)
    delay(1000) // body pozastavení
    return "Data načtena"
}

fun main() = runBlocking {
    println("Začínáme načítání...")
    val data = fetchData() // volání suspend funkce
    println(data)
    println("Načítání dokončeno")
}

Zde je fetchData suspend funkce, která používá delay (další suspend funkci) k simulaci zpoždění. delay je bod pozastavení. runBlocking vytváří korutinový blok pro spuštění main jako blokující vlákno, ale uvnitř ní se fetchData provádí neblokujícím způsobem.