Что это простыми словами

Flow — это конвейер для данных, которые приходят порциями во времени.

Аналогия: представьте ленту новостей в соцсети. Новые посты появляются постепенно — один за другим. Flow — это способ обрабатывать такой поток: как только пришёл новый пост, приложение его получает, обрабатывает и показывает пользователю. Или как курьерская служба: вы подписались на получение посылок, и как только посылка готова, курьер её приносит — не нужно постоянно бегать и проверять.

Данные могут приходить из разных источников: с сервера по сети, из базы данных, от датчиков телефона. Flow позволяет удобно подписаться на эти данные и реагировать на каждое новое значение.

Официальное определение

Теперь, когда суть понятна, вот как Flow описывают в вакансиях и документации. Эту формулировку вы встретите у заказчика и в резюме — и теперь будете понимать, что за ней стоит.

«Flow — холодный асинхронный поток данных в Kotlin, построенный поверх корутин и испускающий последовательность значений».

Разберём по словам. «Асинхронный» значит, что данные приходят не сразу, а со временем — приложение не зависает в ожидании. «Холодный поток» означает, что данные начинают поступать только когда кто-то подписался и реально слушает — как видео на YouTube не грузится, пока вы его не запустили. «Корутины» — это способ писать асинхронный код в Kotlin просто и понятно, без колбэков и вложенности; Flow работает на их основе. «Испускающий последовательность значений» — это и есть тот самый конвейер: не одно значение сразу, а поток данных один за другим.

Какую задачу решает

Flow решает задачу обработки данных, которые приходят не разом, а порциями: обновления с сервера, изменения в базе данных, события от пользователя. Вместо того чтобы постоянно опрашивать источник «есть ли что-то новое?», приложение подписывается один раз — и получает уведомления о каждом изменении.

Типичные примеры: лента сообщений в чате обновляется в реальном времени, список товаров в корзине меняется при каждом добавлении, поиск показывает результаты по мере того, как пользователь печатает. Во всех этих случаях данные поступают постепенно, и Flow позволяет элегантно с этим работать.

Побочная польза: Flow даёт удобные инструменты для преобразования данных по пути — фильтровать, объединять несколько потоков, откладывать обработку. Это упрощает код и делает его читаемым.

К какой экосистеме относится

Чем заменяется

До появления Flow в мире Kotlin/Android эту задачу решала библиотека RxJava (и её Android-версия RxAndroid). Обе делают одно и то же — работают с асинхронными потоками данных. Но переход между ними дорогой: это разные API, разные способы мышления, и переучивание занимает недели. Проект на RxJava редко переписывают на Flow целиком — слишком затратно.

Ещё один вариант — LiveData (часть Android Jetpack). Она проще Flow, но менее гибкая. Сейчас во многих проектах LiveData заменяют на Flow, потому что Flow мощнее и универсальнее. Переход с LiveData на Flow проще, чем с RxJava.

Также в Kotlin есть Channels — другой способ передачи данных внутри корутин. Разница в том, что Channel «горячий» (данные идут, даже если никто не слушает), а Flow «холодный» (запускается только при подписке). Обычно Flow удобнее, но в некоторых случаях нужны именно каналы.

Что не путать

Насколько это важно при отборе

Короткий ответ: зависит от проекта.

Если проект уже на Flow — хорошо, когда кандидат знаком с ним. Но если у кандидата опыт с RxJava вместо Flow, это не повод отбраковывать сразу. Да, переход требует времени (несколько недель), но человек с опытом работы с реактивными потоками разберётся. Главное — что он понимает саму идею асинхронных потоков данных.

Обратная ситуация сложнее: если проект на RxJava, а кандидат знает только Flow — переучиться тоже можно, но RxJava считается более сложной и запутанной. Стоит уточнить у нанимающего менеджера, готовы ли они дать время на адаптацию.

Если кандидат вообще не работал с асинхронными потоками (ни Flow, ни RxJava, ни LiveData), а вакансия предполагает сложную работу с данными в реальном времени — это красный флаг. Спросите, как он решал подобные задачи: возможно, использовал колбэки или другие подходы, но тогда придётся учить Flow с нуля.

Это общий ориентир. В разных компаниях требования отличаются, поэтому всегда сверяйтесь с текстом конкретной вакансии.