Dart Academy · Урок

Преобразование потоков: map, where, take

Изменение последовательности событий

Урок 3 из 413 шагов

«Преобразование потоков: map, where, take» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Потоки можно преобразовывать

Как и списки, потоки имеют удобные методы для изменения своих событий. Вы можете transform поток в новый, не затрагивая исходный.

map преобразует каждое событие

Метод map запускает функцию для каждого события и выдаёт результат. Он превращает поток значений в поток преобразованных значений.

final doubled = numbers.map((n) => n * 2);

map сохраняет количество

При использовании map количество событий не меняется — изменяется только их форма. Три входных значения всегда дают ровно три выходных. ✨

Stream.fromIterable([1, 2, 3])
    .map((n) => 'Item $n');

where фильтрует события

Метод where сохраняет только события, прошедшие проверку. Всё, что возвращает false, исключается из нового потока.

final evens = numbers.where((n) => n.isEven);

where может уменьшить поток

В отличие от map, where может выдать меньше событий, чем получил. Если проверку не проходит ни одно событие, результирующий поток остаётся пустым.

take ограничивает количество

Метод take выдаёт только первые n событий, а затем прекращает прослушивание. Он идеально подходит, когда из длинного потока нужны всего несколько значений. 🎯

final firstThree = bigStream.take(3);

take отменяет подписку досрочно

После выдачи n событий take автоматически отменяет подписку на исходный поток. Исходный поток перестаёт выдавать данные для Вашего кода.

Цепочка преобразований

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

numbers
    .where((n) => n.isEven)
    .map((n) => n * 10)
    .take(2);

Ленивые по своей природе

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

Дополнительные инструменты: takeWhile и skip

Помимо основных трёх методов, takeWhile выдаёт события, пока проверка успешна, а skip пропускает первые n событий. Тот же принцип построения цепочек сохраняется.

stream.skip(2).takeWhile((n) => n < 100);

Использование результата

После преобразования прочитайте новый поток с помощью await for или listen. Каждое выданное значение уже прошло через всю цепочку.

await for (final v in transformed) {
  print(v);
}

Быстрая проверка

Какой метод может уменьшить количество событий?

Итоги

Вы можете изменять потоки с помощью map, фильтровать их с помощью where и ограничивать с помощью take. Все эти методы можно объединять в ленивую цепочку, которая запускается только при прослушивании. 🎉

Можно начать бесплатно

Изучай Dart с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Преобразование потоков: map, where, take» бесплатный?

Да — полный текст урока «Преобразование потоков: map, where, take» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Преобразование потоков: map, where, take»?

Изменение последовательности событий Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Преобразование потоков: map, where, take»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Прослушивание с await for
  2. Одноразовые и широковещательные потоки
  3. Преобразование потоков: map, where, take
  4. Создание потоков с async*
← Назад к Dart Academy