Ответ
Холодный поток (cold flow) в Kotlin Flow — это поток, который начинает испускать данные только при наличии активного подписчика. Каждая подписка запускает выполнение потока заново.
Особенности:
- Ленивая инициализация (выполняется только при вызове
collect) - Независимые подписки (каждый
collectзапускает поток с начала) - Пример:
flow { ... },asFlow()
Пример:
val coldFlow = flow {
println("Emitting 1")
emit(1)
println("Emitting 2")
emit(2)
}
// Первый collect
coldFlow.collect { println("Received $it") } // Выведет 1, 2
// Второй collect (запустится заново)
coldFlow.collect { println("Received again $it") } // Выведет 1, 2 снова Ответ 18+ 🔞
А, холодный поток! Ну это ж классика, ебать мои старые костыли. Представь себе, что у тебя есть не какая-то мартышлюшка, которая сама по себе тараторит, а нормальный, адекватный источник. Он сидит себе тихо, не дергается, и начинает что-то делать только тогда, когда к нему пришли и сказали: «Ну давай, чувак, работай».
Короче, суть:
- Ленивый, как студент на первой паре. Пока на него не подписались (не вызвали
collect), он нихрена не делает. Просто висит в памяти, красивый такой, и ждёт своего часа. - Каждая подписка — это новый заезд. Это не как в баре, где один рассказывает анекдот, а все слушают. Это как если бы ты каждый раз заново включал одну и ту же песню. Первый раз послушал — исполнитель спел. Второй раз нажал play — он снова начинает петь с самого начала, ёпта. Независимые подписки, блядь.
- Откуда берётся: обычный
flow { ... }илиasFlow()— они все такие, холодные.
Смотри, как это выглядит в коде, тут всё просто:
val coldFlow = flow {
println("Emitting 1")
emit(1)
println("Emitting 2")
emit(2)
}
// Первый чувак подписался
coldFlow.collect { println("Received $it") } // Консоль: Emitting 1, Received 1, Emitting 2, Received 2
// Пришёл второй, и всё по новой!
coldFlow.collect { println("Received again $it") } // И опять: Emitting 1, Received again 1, Emitting 2, Received again 2
Видишь? Он каждый раз заново println выводит. Не кэширует нихуя. Чистый, честный холодный поток. Удобная штука, когда тебе нужно, чтобы логика запускалась свежаком для каждого слушателя. А то бывает, подпишешься второй раз, а тебе уже остатки с прошлого раза выдают — доверия ебать ноль. Тут такого нет.