En prévision du début du cours « Kotlin Backend Developer» , nous invitons tout le monde à s'inscrire à un cours ouvert sur le thème «Kotlin multiplateforme: recto / verso en une seule langue» .
Et maintenant, nous vous proposons la traduction traditionnelle de l'article à lire.
Aujourd'hui, nous sommes heureux d'annoncer la sortie de la version 1.4.0 de la bibliothèque Kotlin Coroutines. Les principales innovations de cette version sont StateFlow et SharedFlow , qui sont désormais des API stables. StateFlow et SharedFlow sont destinés à être utilisés dans des situations où la gestion de l'état est requise dans le contexte d'une exécution asynchrone à l'aide de Kotlin Coroutines.
API- Flow Kotlin , . , Flow — . Kotlin Flow , Sequences: , , . . Sequences Flow Kotlin , Flow .
Flow : , API- Flow. Flow backpressure, — .
val flow: Flow<Int> = flow {
delay(100)
for(i in 1..10) {
emit(i)
}
}.map {
delay(100)
it * it
}
Flow , Sequences. Flow , backpressure.
Flow API-, , . , . : , «» «», «» «». : .
API- Flow , . ConflatedBroadcastChannel. ConflatedBroadcastChannel . , , . , . , - !
ConflatedBroadcastChannel API- — StateFlow SharedFlow!
StateFlow
StateFlow : StateFlow MutableStateFlow:
public interface StateFlow<out T> : SharedFlow<T> {
public val value: T
}
public interface MutableStateFlow<out T>: StateFlow<T>, MutableSharedFlow<T> {
public override var value: T
public fun compareAndSet(expect: T, update: T): Boolean
}
. .
, API-.
class DownloadingModel {
private val _state.value = MutableStateFlow<DownloadStatus>(DownloadStatus.NOT_REQUESTED)
val state: StateFlow<DownloadStatus> get() = _state
suspend fun download() {
_state.value = DownloadStatus.INITIALIZED
initializeConnection()
processAvailableContent {
partialData: ByteArray,
downloadedBytes: Long,
totalBytes: Long
->
storePartialData(partialData)
_state = DownloadProgress(downloadedBytes.toDouble() / totalBytes)
}
_state.value = DownloadStatus.SUCCESS
}
}
state, (state) . : state.value = DownloadStatus.INITIALIZED
. , , . , state
, .
, API . , - . , , state
Flow.
SharedFlow
, , ? API- SharedFlow. API- , .
public interface SharedFlow<out T> : Flow<T> {
public val replayCache: List<T>
}
— , , . , .
SharedFlow MutableSharedFlow.
interface MutableSharedFlow<T> : SharedFlow<T>, FlowCollector<T> {
suspend fun emit(value: T)
fun tryEmit(value: T): Boolean
val subscriptionCount: StateFlow<Int>
fun resetReplayCache()
}
MutableSharedFlow . , MutableSharedFlow . , .
MutableSharedFlow . SharedFlow.
public fun <T> MutableSharedFlow(
replay: Int,
extraBufferCapacity: Int = 0,
onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND
): MutableSharedFlow<T>
MutableSharedFlow , , , , , . , , .
, Flow.shareIn
.
public fun <T> Flow<T>.shareIn(
scope: CoroutineScope,
replay: Int,
started: SharingStarted = SharingStarted.Eagerly
)
API- StateFlow SharedFlow Kotlin . , .
Kotlin Coroutines , Kotlin 1.4 Online Event.
"Kotlin Backend Developer".
"Kotlin multiplatform: front/back ".