Sobes.tech
Middle

Czym jest funkcja suspend w języku Kotlin?

sobes.tech AI

Odpowiedź od AI

Funkcja suspend — to funkcja w Kotlinie, którą można "wstrzymać" (suspend) i później "wznowić" (resume). Służy do pisania asynchronicznego, nieblokującego kodu w stylu imperatywnym, co upraszcza pracę z operacjami długotrwałymi, takimi jak żądania sieciowe czy operacje na bazie danych.

Kluczowe cechy funkcji suspend:

  • Modyfikator suspend: Deklarowana za pomocą słowa kluczowego suspend przed nazwą funkcji.
  • Praca z korutynami: Wywoływana tylko z innych funkcji suspend lub z builderów korutyn (np. launch, async).
  • Nieblokująca natura: Wstrzymanie funkcji suspend nie blokuje wątku, na którym jest wykonywana. Zamiast tego, wątek jest zwalniany do wykonywania innych zadań, a gdy wynik operacji asynchronicznej jest gotowy, wykonanie funkcji jest wznawiane od miejsca wstrzymania.
  • Wyraźne oznaczenie: Modyfikator suspend wyraźnie wskazuje, że wywołanie tej funkcji może być operacją długotrwałą i nie powinna być wykonywana bezpośrednio na głównym wątku (UI).

Przykład:

// Funkcja zwykła
fun fetchDataBlocking(): String {
    // Blokujące wywołanie sieciowe, może się zawiesić
    Thread.sleep(2000)
    return "Dane odebrane"
}

// Funkcja suspend
suspend fun fetchDataNonBlocking(): String {
    // Asynchroniczne wywołanie sieciowe
    // Korutyna jest tutaj wstrzymywana, wątek nie jest blokowany
    delay(2000) // Przykład funkcji suspend symulującej opóźnienie
    return "Dane odebrane asynchronicznie"
}

Funkcje suspend stanowią podstawę do tworzenia czytelnego i łatwego w utrzymaniu kodu asynchronicznego z użyciem korutyn.