TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Flutter & Dart | Мобильный трудоголик

22 Sep, 09:02

Открыть в Telegram Поделиться Пожаловаться

👣 Как async* упрощает работу с потоками в Dart

В Dart есть инструмент, который многие недооценивают. Это оператор async*. Он позволяет создавать потоки данных так же легко, как обычные функции. Без лишних классов, ручного управления подписками и бесконечных циклов с обработчиками ошибок.


Что такое генераторы:

Генераторы - это функции, которые возвращают данные по частям, а не все сразу. Они позволяют экономить память и время выполнения. Но обычно такие функции синхронные. А что делать, если нужна асинхронность?

Здесь и вступает async*. Вместо Iterable такая функция возвращает Stream. Внутри нее доступны все возможности генератора плюс await.


Как это выглядит на практике:

Вот пример функции, которая генерирует числа с задержкой:


Stream generateNumbers() async* {
for (var i = 0; i < 5; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}


Все просто. Мы используем привычные конструкции: цикл, await, yield. Никаких StreamController, никаких подписок, никаких ручных закрытий.


Что делает ключевое слово yield:

yield - это оператор, который возвращает очередное значение из генератора или асинхронного генератора. Когда функция помечена как async*, она не выполняется целиком сразу. Вместо этого она возвращает Stream. Каждый раз, когда выполнение доходит до yield, значение отправляется в поток и функция приостанавливается до следующего запроса.

Простыми словами: yield - это как return, но не завершает функцию, а отдает одно значение и ждет, когда попросят следующее. Функция продолжает работу с того же места, а не начинает заново.

Есть еще yield*, который передает управление другому генератору и отдает все его значения подряд. Это удобно, когда нужно объединить несколько источников данных в один поток.


🔗 Читать подробнее


💡 Вывод:

async* - это не просто синтаксический сахар. Это способ писать потоки данных чисто и предсказуемо. Он экономит код, упрощает чтение и делает логику более явной. Логика генерации данных находится в одном месте и выглядит как обычный код. Все, что связано с созданием потока, обработкой ошибок и закрытием, берет на себя язык.


Подписаться на канал:
➡️ Flutter & Dart | Мобильный трудоголик

517 0 5 11
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot