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

Бесконечный генератор в Dart

Генератор с sync* может крутить while (true) и выдавать yield на каждом витке. Если длину не ограничить, полный обход такого Iterable не завершился бы.

Счетчик в локальной переменной растет на каждом вызове. Конечное действие без take здесь опасно - обход не завершился бы:

Iterable<int> endless() sync* { int n = 0; while (true) { yield n; n = n + 1; } } final head = endless().take(6).toList(); print(head);

Метод take отрезает конечный кусок, и только после этого toList материализует шесть значений. Исходный генератор при этом остается бесконечным в описании.

Тот же прием с начальным значением и правилом плюс один: ряд не ограничен, но наружу уходит только часть:

Iterable<int> fromHundred(int n) sync* { while (true) { yield n; n = n + 1; } } final window = fromHundred(100) .where((n) => n % 10 == 0) .take(3) .toList(); print(window);

С помощью sync* выдайте нечетные числа начиная с 1 через локальный счетчик. Возьмите первые пять и выведите список.

Постройте бесконечный ряд степеней двойки от 1. Оставьте только значения не больше 64, возьмите не более четырех элементов и выведите их сумму.

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