tgoop.com/kotlin_broadcast/1706
Create:
Last Update:
Last Update:
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π° Kotlin ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, Π·Π½Π°ΠΊΠΎΠΌΡΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠΎ Flow ΠΈΠ· Coroutines. ΠΠ³ΠΎ ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ, ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Flow ΠΈΠ· Kotlin Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
interface Flow<out T> {
suspend fun collect(collector: FlowCollector<T>)
}
fun interface FlowCollector<in T> {
suspend fun emit(value: T)
}
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄?
π ΠΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ ΠΈ ΡΡΠ½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΡΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ.
π ΠΠΈΠ±ΠΊΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ API. ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
π Π£Π΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ. Π¦Π΅ΠΏΠΎΡΠΊΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎ, Π»Π΅Π³ΠΊΠΎ ΡΠΈΡΠ°Π΅ΠΌΡ ΠΈ ΡΠ»Π΅Π΄ΡΡΡ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ ΡΡΠΈΠ»Ρ, ΠΏΡΠΈΠ½ΡΡΠΎΠΌΡ Π² Kotlin.
ΠΠ»ΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°
β ΠΡΠΎΡΡΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ Kotlin Extension-ΡΡΠ½ΠΊΡΠΈΠΉ.
β ΠΡΠ³ΠΊΠΎΡΡΡ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
β Π£Π»ΡΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
β ΠΡΠΎΡΡΡΠ΅ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ API ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π² ΡΠΈΠΏΠ°Ρ
ΠΠΈΠ½ΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°
β οΈ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΈ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠ°ΡΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
β οΈ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ.
ΠΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ?
ΠΠ±ΡΡΠ½ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ:
π Π€ΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ°ΠΌΡΡ ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
π ΠΠ΅ΡΠΎΠ΄Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π² ΡΠ°Π·Π½ΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
π Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°.
ΠΠΎΠ³Π΄Π° ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠΎΠΈΡ Π΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
Π―Π²Π½ΡΠΌΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ - ΡΠ΅ ΡΡΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
interface Container {
val childCount: Int
// β ΠΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
fun isEmpty(): Boolean = childCount == 0
}
// β ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ API ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
fun Container.isEmpty(): Boolean = childCount == 0
π¬ ΠΠ΅Π»ΠΈΡΠ΅ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API
#kotlin