Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpChIt 177 of 299 menu
◀ ▶

Обход канала в Kotlin

После серии send и close в буфере может остаться несколько значений. Забирать их по одному вручную утомительно; канал поддерживает обход через for, как коллекцию.

Цикл читает элементы по порядку и сам останавливается, когда канал закрыт и данных больше нет. Так обрабатывают всю очередь без явных проверок конца:

import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.runBlocking fun main() { runBlocking { val pipe = Channel<Int>(3) pipe.send(1) pipe.send(2) pipe.send(3) pipe.close() for (n in pipe) { println(n) } } }

На отдельных строках появятся 1, 2 и 3. После последнего элемента цикл завершается: закрытый пустой канал больше не дает итераций.

Тот же прием работает со строками и накоплением результата в переменной перед печатью итога:

import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.runBlocking fun main() { runBlocking { val tags = Channel<String>(2) tags.send("north") tags.send("south") tags.close() var joined = "" for (tag in tags) { joined += tag + " " } println(joined.trim()) } }

Вывод содержит обе метки через пробел. Обход не требует receiveCatching: механизм итерации сам учитывает закрытие после последнего элемента.

Заполните канал символов "a", "b", "c" с буфером на три элемента, закройте его и напечатайте каждый символ циклом for.

Канал целых с вместимостью 2 получает 7 и 8, затем закрывается. Сложите все числа из обхода и выведите сумму.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить