Что такое каналы в Kotlin

«Что такое каналы в Kotlin» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Каналы (Channels) в Kotlin — это механизм для передачи данных между корутинами. Они похожи на блокирующие очереди, но работают асинхронно.

Основные особенности:

  • Channel<T> — интерфейс, поддерживающий отправку (send) и получение (receive) данных.
  • По умолчанию канал буферизированный (размер буфера можно задать).
  • Может быть закрыт (close) для сигнализации завершения отправки.

Пример:

val channel = Channel<Int>()  

launch {  
    repeat(5) {  
        channel.send(it)  
    }  
    channel.close()  
}  

launch {  
    for (value in channel) {  
        println(value) // 0, 1, 2, 3, 4  
    }  
}  

Типы каналов:

  • Rendezvous (по умолчанию) — без буфера.
  • Buffered — с фиксированным размером буфера.
  • Conflated — хранит только последнее значение.
  • Unlimited — неограниченный буфер.

Используются для организации потоков данных между корутинами.